validates_acceptance_of terms复选框和Facebook连接

vda*_*bry 1 facebook ruby-on-rails devise

你怎么能强迫facebook连接条款和条件接受?

在我的OmniauthCallbacksController我尝试过

@user_ipad.terms = true
Run Code Online (Sandbox Code Playgroud)

用户的验证仍然失败,用户被重定向到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
Run Code Online (Sandbox Code Playgroud)

/应用程序/模型/用户

  attr_accessible :terms
  ...
  validates_acceptance_of :terms, :allow_nil => false, :message => "Vous devez accepter les conditions générales d'utilisation", :on => :create
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,文森特

小智 5

validates_acceptance_of有一个"接受"选项.Rails doc说:

:accept - 指定被视为已接受的值.默认值是字符串"1",这使得与HTML复选框的关联变得容易.如果要验证数据库列,则应将此值设置为true,因为在验证之前,属性从"1"转换为true.

所以在你的情况下,你应该更换

@user_ipad.terms = true
Run Code Online (Sandbox Code Playgroud)

用:

@user_ipad.terms = "1"
Run Code Online (Sandbox Code Playgroud)