【问题标题】:check_box_tag doesn't pass any parameter if not checkedcheck_box_tag 如果未选中则不传递任何参数
【发布时间】:2016-03-06 21:28:19
【问题描述】:

如果check_box_tag 被选中,我试图在控制器中有一个 if else 语句来做一些事情,如果没有被选中,我会做一些别的事情。

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

如果选中并提交表单"apply"=&gt;["1"] 作为参数传递,如果未选中则不发送任何内容。

如果不检查,我可以将"apply"=&gt;["0"] 作为参数传递吗?

【问题讨论】:

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


    【解决方案1】:

    check_box_tag 确实是does not use the hidden field,因此在未选中该框的情况下它不会发送任何内容(与 check_box 帮助器不同,但它在数组参数的情况下仍然没有用,正如上面 Meier 所指出的)。

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

    params[:apply] ||= []
    

    另一方面,如果您想将复选框用作有序数组,其中每个值将由其在数组中的常量位置决定,无论是真还是假,(即,如果您想在apply 参数:[0, 1, 0, 0, 1]),这是行不通的。您必须选择不同的方法,例如使用带有哈希参数而不是数组的复选框。

    【讨论】:

      【解决方案2】:

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

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

      数组参数不能很好地与 check_box 帮助器配合使用。根据 对 HTML 规范未选中的复选框不提交任何值。

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

      【讨论】:

      • 这一行让我感到困惑“最好使用 check_box_tag 或使用哈希而不是数组。”我觉得它说最好使用check_box_tag,因为它会为选中和未选中发送一个参数。但它没有......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2019-06-09
      • 2021-09-03
      相关资源
      最近更新 更多