为什么此块中的此变量对于此验证代码为空?

时间:2011-06-11 03:34:04

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

我正在使用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”,验证也始终失败。

我猜这可能与包含文本字段的文件不在用户目录中但位于单独的注册目录中的事实有关(我在设置时从this railscast开始执行此操作omn​​iauth)。我真的不确定。我该如何解决这个问题?

以下是更多信息:

这是在我的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

2 个答案:

答案 0 :(得分:0)

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

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

应该有用。

答案 1 :(得分:0)

问题是,除了attr_accessor :invite_code之外,我还需要attr_accessible :invite_code