布尔验证不通过但是params存在Rails 4和Devise

时间:2014-09-03 22:04:32

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

我正在使用带有设计的rails 4中的布尔复选框运行服务条款验证,我看到params被传递但我的验证仍然会引发错误。

html.erb

<%= check_box_tag(:agree) %>
<%= label_tag(:agree, "I Agree") %>

devise_permitted_pa​​rameters.rb

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :first_name << :last_name << :agree
  devise_parameter_sanitizer.for(:account_update) << :first_name << :last_name
end

如果我在模型中执行此操作,则无效:

validates_acceptance_of :agree, :allow_nil => false, :accept => true, :on => :create

服务器:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"VfMsm8nigtdMDh/jo6SyU8mUt5LIWlz0ymuiJwl4qFY=",
"user"=>{"first_name"=>"c", "last_name"=>"c", "email"=>"abc@def.com", "password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]"}, "agree"=>"1", "commit"=>"Register"}
Unpermitted parameters: first_name, last_name

我不知道为什么我有不允许的参数...只有在我提交提交表格时才会出现。

如果我从其他帖子中使用此建议,它会通过,但如果未选中同意框,它也允许注册:

validates_inclusion_of :agree, :in => [true, false]

1 个答案:

答案 0 :(得分:0)

在查看代码之后,我意识到使用了form_for,这就是为什么form_tag语法没有按预期工作的原因。它还说明了为什么它仍然输出提交的信息。

我仍然不能100%确定为什么有名字的未授权参数。我认为解决各种问题是一个cookie问题,如果你重新启动服务器它又好了。

希望这可以节省其他人的时间。