我正在使用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开始执行此操作omniauth)。我真的不确定。我该如何解决这个问题?
以下是更多信息:
这是在我的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 :(得分:0)
我相信value
作为数组传递。所以..
record.errors.add attr, "is wrong" unless value[0] == "12345"
应该有用。
答案 1 :(得分:0)
问题是,除了attr_accessor :invite_code
之外,我还需要attr_accessible :invite_code