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

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

问题描述:

我正在使用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 
+0

你介意张贴的控制器代码? – natedavisolds 2011-06-11 04:09:39

+0

用户控制器或注册控制器? – 2011-06-11 04:11:52

+0

我发布了........ – 2011-06-11 04:15:30

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

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

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

应该工作。