2012-03-09 37 views
1

如何強制條件和條件接受whith facebook連接?validates_acceptance_of條款複選框和Facebook連接

在我OmniauthCallbacksController我試圖

@user_ipad.terms = true 

驗證用戶仍然失敗,用戶被重定向到一個錯誤消息的sign_up形式。

/應用/控制器/ OmniauthCallbacksController

 @user_ipad = UserIpad.new(:password => Devise.friendly_token[0,20]) 
     @user_ipad.update_with_facebook_infos(omniauth) 
     @user_ipad.authentication_ways.build(:provider => omniauth['provider'], :uid => omniauth['uid']) 
     @user_ipad.terms = true 

     if @user_ipad.save() 
     sign_in_and_redirect @user_ipad, :event => :authentication 
     else 
     session["devise.facebook_data"] = omniauth 
     render :action=>'new', :controller=>'user_ipads', :layout => 'empty_layout' 
     end 

/應用/模型/用戶

attr_accessible :terms 
    ... 
    validates_acceptance_of :terms, :allow_nil => false, :message => "Vous devez accepter les conditions générales d'utilisation", :on => :create 

感謝您的幫助, 文森特

回答

5

validates_acceptance_of有一個 「接受」 選項。 Rails doc說:

:accept - 指定被認爲接受的值。默認的 值是一個字符串「1」,可以很容易地與HTML 複選框關聯。如果您正在驗證數據庫 列,則應該將其設置爲true,因爲在驗證之前,屬性從「1」到類型轉換爲true。

所以你的情況,你應該更換

@user_ipad.terms = true 

有:

@user_ipad.terms = "1"