如何检查simple_form中的check_box是否已被选中

时间:2015-06-02 19:45:18

标签: html ruby-on-rails

这是它生成的HTML

f.check_box :tos

生成

<input name="user[tos]" type="hidden" value="0">

<input id="user_tos" name="user[tos]" type="checkbox" value="1">

在控制器中我需要做什么来检查它是否已被检查?

2 个答案:

答案 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