验证验收始终失败

时间:2014-06-23 16:22:52

标签: ruby-on-rails forms ruby-on-rails-4 devise

我在这个问题上找不到其他答案帮助了我。

我有一个条款和条件框,想验证它是否在创建时进行了检查。

在我的模特中:

  validates :terms_and_conditions, :on => :create, acceptance: true, :allow_nil => false

在我看来:

<%= f.check_box(:terms_and_conditions )%>

无论是否检查check_box,它总是失败。我认为它实际上从未设置过这个领域,问题在我看来,但我无法找到它。

提交表单时记录。

    Processing by Users::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xNNmGTWSV4hkj0rrlZeOq+AiTlJ9sc9+cAT1Sy0bjhc=", "user"=>{"email"=>"sdasdr@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "name"=>"", "surname"=>"", "country_id"=>"", "language"=>"", "description"=>"", "register_as_company"=>"1", "terms_and_conditions"=>"1"}, "commit"=>"Sign up"}
Unpermitted parameters: name, surname, country_id, language, description, register_as_company, terms_and_conditions
  [1m[35m (0.1ms)[0m  begin transaction
  [1m[36mUser Exists (0.3ms)[0m  [1mSELECT 1 AS one FROM "users" WHERE "users"."email" = 'sdasdr@gmail.com' LIMIT 1[0m
  [1m[35m (0.1ms)[0m  rollback transaction
  [1m[36mCountry Load (0.2ms)[0m  [1mSELECT "countries".* FROM "countries"[0m
  Rendered devise/registrations/new.html.erb within layouts/application (6.1ms)
  Rendered layouts/_auth_widget.html.erb (1.1ms)
Completed 200 OK in 127ms (Views: 22.8ms | ActiveRecord: 0.7ms)

1 个答案:

答案 0 :(得分:5)

您未允许将terms_and_conditions属性保存在数据库中。如果您发现服务器密切关注,

Unpermitted parameters: name, surname, country_id, language, description, register_as_company, terms_and_conditions

有多个不允许的属性,因此所有这些属性都没有保存在数据库中。 terms_and_conditions变为nil并导致错误,因为通过表单提交的值将被忽略(因为未获准状态)。

这与Rails 4 Strong Parameters概念有关,其中只有那些属性会保存在白名单/允许的数据库中。

查看有关Strong Parameters

的信息

另外,根据服务器日志,我注意到这些属性是User模型的一部分,它是Devise模型。允许Devise的属性可以以不同的方式完成, 你可以参考SO Question: Rails devise simple form not saving all fields