2011-06-11 86 views
0

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

回答

0

所以問題是,除了attr_accessor :invite_code,我需要attr_accessible :invite_code以及

0

我相信value作爲一個數組傳遞。所以..

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

應該工作。