如何在Rails中呈现数组/复选框列表?

时间:2014-01-31 04:40:17

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

如果我有一个对象数组,并且我想要每行的复选框,我该如何在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

2 个答案:

答案 0 :(得分:1)

来自this

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

你想要这样 <input type="checkbox" name="txn_42" checked/>

所以我认为这样可以解决问题 - &gt;

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

答案 1 :(得分:0)

经过多次反复试验,我发现了一个无证的功能。它将解析&#39;给定名称,提取索引,将其用于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