复选框总是传递false

时间:2014-12-05 11:25:53

标签: ruby-on-rails ruby-on-rails-4 slim-lang

我在视图中有这个表单

div
  = label_tag "choice[has_pictures]", "Choice can have pictures?"
  = check_box_tag "choice[has_pictures]", choice.has_pictures, choice.has_pictures

但是,每次我提交它时,我总是将参数has_pictures视为false。我不知道我错过了什么,如果它是一个苗条的东西

我使用的是Rails 4.0.11

1 个答案:

答案 0 :(得分:1)

我相信,你可以设置断点(甚至在视图中!)并检查choice.has_pictures的值是多少。

可能是nil或者您的方法名称可能存在错误,因为当布尔返回方法的名称以问号结尾时,大多数都会被调用:choice.has_pictures? (对于模型'boolean field'这样的包装方法,这是一种很好的做法。

Slim没有任何问题 - 它只是将Rails'辅助方法check_box_tag调用的结果放到输出中。

然而,还有一个来自Rails docs的提示:您对value方法使用了错误的check_box_tag属性:

check_box_tag(name, value = "1", checked = false, options = {})

如果您的模型没有图片(has_pictures == false),则相应的参数将在选中复选框后返回false,而nil则不会。{/ p>

检查出来:

<input value="false" name="option_name" />

如果选中,则params["option_name"] == false。如果不是,params["option_name"] == nil

所以,我建议你以更方便的方式使用它:

= check_box_tag "choice[has_pictures]", true, choice.has_pictures