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