我试图在控制器中使用if else语句,以便在检查check_box_tag
时执行某些操作,如果未检查则执行其他操作。
<%= check_box_tag "apply[]", 1, false %>
如果选中并且表单已提交"apply"=>["1"]
作为参数传递,则不会发送任何内容。
如果没有检查过,"apply"=>["0"]
可以作为参数传递吗?
答案 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或使用 哈希而不是数组。