Rails 4 - 使用设计创建新用户注册时,复选框协议验证失败

use*_*289 3 ruby-on-rails devise ruby-on-rails-4

我试图agreement在表单上包含一个"接受服务条款"复选框(被叫).该应用程序Devise用于用户管理.

views/devise/registrations/new.html.erb 具有:

<%= f.check_box :agreement, class: 'form-control' %>
Run Code Online (Sandbox Code Playgroud)

application_controller.rb有:

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:agreement, :phone, :first_name, :last_name, :domain, :email, :password, :password_confirmation) }
  end
Run Code Online (Sandbox Code Playgroud)

然后在user.rb控制器中,它有

# neither of the below worked
# validates :agreement, :acceptance => true
validates :agreement, acceptance: true
Run Code Online (Sandbox Code Playgroud)

如果我查看数据development.log,它会显示agreement正确的字段,值为1,这是(根据Rails文档,验证的预期值):

Parameters: {"utf8"=>"?", "authenticity_token"=>"jFg6+ZDM1qldh020lv/FQHxlgZkby2dhUbejjXurr4w=", "user"=>{"first_name"=>"Joe", "last_name"=>"Smith", "phone"=>"2098993344", "domain"=>"google.com", "email"=>"test@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "agreement"=>"1"}, "commit"=>"Create User"} 
Run Code Online (Sandbox Code Playgroud)

但是,无论何时提交表单,它都会在提交表单时显示"必须接受协议"的错误消息.

关于这是由什么引起的任何想法?

Bra*_*ell 7

尝试使用它进行验证

validates :agreement, acceptance: { accept: true }

根据Rails文档

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