【问题标题】:Why is this variable in this block for this validation code empty?为什么这个验证码的这个块中的这个变量是空的?
【发布时间】:2011-06-11 03:34:03
【问题描述】:

我正在使用 Devise,我正在尝试设置用户必须输入才能注册的邀请码。我的用户模型中有这段代码:

attr_accessor :invite_code

validates_each :invite_code, :on => :create do |record, attr, value|
    record.errors.add attr, "is wrong" unless value == "12345"
end

这个文本字段:

<%= f.text_field :invite_code %>

问题是value总是空的,所以验证总是失败,即使邀请码是“12345”。

我猜这可能与包含文本字段的文件不在用户目录中而是在单独的注册目录中的事实有关(我在设置omniauth时通过关注this railscast做到了这一点) .不过我真的不确定。我该如何解决这个问题?

这里有更多信息:

这是在我的 routes.rb 中:

devise_for :users, :controllers => { :registrations => 'registrations'}

这是在我的用户控制器中:

def new
  @user = User.new
end

def create
  @user = User.new(params[:user])
  if @user.save!
    redirect_to videos_path
  else
    render :action => 'new'
  end
end

这是在我的注册控制器中:

def create  
  super  
  session[:omniauth] = nil unless @user.new_record?
end

【问题讨论】:

  • 您介意发布控制器代码吗?
  • 用户控制器还是注册控制器?

标签: ruby-on-rails ruby ruby-on-rails-3 validation devise


【解决方案1】:

我相信value 是作为数组传递的。所以..

record.errors.add attr, "is wrong" unless value[0] == "12345"

应该可以。

【讨论】:

    【解决方案2】:

    所以问题是除了attr_accessor :invite_code,我还需要attr_accessible :invite_code

    【讨论】:

      猜你喜欢
      • 2013-08-12
      • 2021-12-12
      • 2021-06-13
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多