如果未选中,check_box_tag不会传递任何参数

时间:2016-03-06 00:19:05

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

我试图在控制器中使用if else语句,以便在检查check_box_tag时执行某些操作,如果未检查则执行其他操作。

<%= check_box_tag "apply[]", 1, false %>

如果选中并且表单已提交"apply"=>["1"]作为参数传递,则不会发送任何内容。

如果没有检查过,"apply"=>["0"]可以作为参数传递吗?

2 个答案:

答案 0 :(得分:1)

check_box_tag确实does not use the hidden field所以如果未选中该框,它就不会发送任何内容(与check_box帮助程序不同,但在数组参数的情况下仍然无用,正如Meier在上面指出的那样)。

如果您尝试以与this SO question中类似的方式使用复选框(例如,发送用户选择的ID数组),那么简单的解决方案可能是对空的参数进行响应。控制器。阻碍的方式:

params[:apply] ||= []

另一方面,如果你想使用复选框作为有序数组,其中每个值将由数组中的常量位置确定,无论是真还是假,(即如果你想得到这样的东西) apply param:[0, 1, 0, 0, 1]),这不起作用。您必须选择其他方法,例如使用带有散列参数的复选框而不是数组。

答案 1 :(得分:0)

导轨指南有一个关于这种特殊情况的警告框:

http://guides.rubyonrails.org/form_helpers.html

  

数组参数与check_box帮助程序不兼容。根据   未经检查的HTML规范复选框没有提交任何值。

     

然而,复选框始终提交一个通常很方便   值。 check_box助手通过创建辅助隐藏来伪造它   输入相同的名称。如果取消选中该复选框,则仅隐藏   输入已提交,如果已检查,则两者都已提交但是   复选框提交的值优先。工作时   使用数组参数,这个重复的提交将混淆Rails   因为重复的输入名称是决定何时开始新的   数组元素。最好使用check_box_tag或使用   哈希而不是数组。