【问题标题】:How do I render an array/list of checkboxes in Rails?如何在 Rails 中呈现复选框的数组/列表?
【发布时间】:2014-02-23 16:50:50
【问题描述】:

如果我有一个对象数组,并且我希望每一行都有一个复选框,我该如何在 Rails 中做到这一点?

-@txns.each do |txn|
  %tr
    %td= checkbox_tag txn.processed?

我想创建类似的 HTML

<input type="checkbox" name="txn_42" checked/>
<input type="checkbox" name="txn_43" />
<input type="checkbox" name="txn_44" />

我在控制台中尝试了一些东西,但似乎不对。

irb(main):015:0> ApplicationController.helpers.check_box_tag 'txnDetail[]', txn.processed, txn.id
=> "<input checked=\"checked\" id=\"txnDetail_\" name=\"txnDetail[]\" type=\"checkbox\" value=\"true\" />"


irb(main):009:0> ApplicationController.helpers.check_box_tag :txnDetail, :processed, txn.id, txn.processed
NoMethodError: undefined method `stringify_keys' for true:TrueClass

参考

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box

【问题讨论】:

  • “看起来不对”是什么意思?您有具体问题吗?
  • 如果 id 不包含在 HTML 中,控制器如何知道提交时检查了哪一行?

标签: html ruby-on-rails forms checkbox ruby-on-rails-4


【解决方案1】:

经过多次试验和错误,我发现了一个未记录的功能。它将“解析”给定的名称,提取索引,将其用作 id,并在提交参数时使用它。

%td= check_box_tag "txnDetail[#{txn.id}]", true, txn.processed # name, value, checked?

渲染后是这样的:

<input checked="checked" id="txnDetail_13" name="txnDetail[13]" type="checkbox" value="true" />

提交时是这样的:

Parameters: {"utf8"=>"check", "authenticity_token"=>"...", "txnDetail"=>{"4"=>"true"}, "commit"=>"Submit"}

在控制器中可以这样处理:

txns = params[:txnDetail] || {}
txns.each do |key, val|
  td = TxnDetail.find(key)
  if val == 'true' # HTML submits strings

【讨论】:

    【解决方案2】:

    来自this

    check_box_tag(name, value = "1", checked = false, options = {})

    你想要这样 &lt;input type="checkbox" name="txn_42" checked/&gt;

    所以我认为这可以解决问题-->

    -@txns.each do |txn|
      %tr
        %td= checkbox_tag txn.id, txn.id, txn.processed?
    

    【讨论】:

    • checkbox_tag "txn_#{txn.id}", txn.id, txn.processed? 这里 txn.id 将成为复选框的 id,txn.processed? 将决定是否选中复选框
    • 好的。那是标准的Rails吗?我是否必须解析所有参数才能获取 id?它生成:"&lt;input checked="checked" id="txn_13" name="txn_13" type="checkbox" value="13" /&gt;".
    • 对不起我的错...现在更正...现在它将生成以下"&lt;input checked="checked" id="13" name="13" type="checkbox" value="13" /&gt;"您可以使用此ID在控制器中访问它们
    • checkbox_tag 的第二个参数指定值,因此如果您不打算使用,可以使用以下%td= checkbox_tag txn.id, nil, txn.processed?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2016-03-22
    相关资源
    最近更新 更多