这是它生成的HTML
f.check_box :tos
生成
<input name="user[tos]" type="hidden" value="0">
<input id="user_tos" name="user[tos]" type="checkbox" value="1">
在控制器中我需要做什么来检查它是否已被检查?
答案 0 :(得分:1)
假设您想知道是否在提交时检查了它,那么您可以通过params[:user][:tos]
获取它的价值。表单中提交的所有数据都存储在params哈希中,其位置等同于输入的name属性。例如:
if params[:user][:tos] == "1"
# Do whatever is here if checked
else
# Do whatever is here if unchecked
end
如果您需要对网页上的检查状态做出反应,控制器无法做到这一点,必须使用JavaScript。类似的东西:
if (document.getElementById('user_tos').checked == 1){
// Do whatever is here if checked
} else {
// Do whatever is here if unchecked
}
<强>附录强>
通过控制器接收参数时,请勿使用该值创建新对象(即Thing.create( thing_value: params[:user][:tos] )
)。如果这是我们的目标,那么你应该研究一下强大的参数,&#34;以及Rails如何实现它们。
附录2
感谢ruby的鸭子打字(动态打字)和params Hash,url编码等的性质。通过params发送的整数,在这种情况下params[:user][:tos]
,将变为串即可。因此,您需要检查&#34; 1&#34; (字符串形式)不是1(int形式)。
答案 1 :(得分:0)
在控制器中,所有参数都以散列params
传递。
您的params
将有一个键user
,其中包含所有用户输入字段的哈希值。
隐藏字段,simple_form在复选框之前插入,确保params[:user][:tos]
设置(值为0),即使未设置复选框也是如此。
所以你可以检查
if params[:user][:tos]>0
# your stuff
end