Rails 表单在数组而不是对象上使用 collection_radio_buttons
Posted
技术标签:
【中文标题】Rails 表单在数组而不是对象上使用 collection_radio_buttons【英文标题】:Rails forms using collection_radio_buttons on array instead of objects 【发布时间】:2017-03-11 15:17:54 【问题描述】:Rails 有一个表单助手 f.collection_radio_buttons
,其操作与 f.collection_select
表单助手非常相似。
但是,f.colleciton_radio_buttons
仅适用于对象集合,不适用于简单数组。
例如,我可以:
<%= f.select :attribute, ["First", "Second"] %>
但是没有:
<%= f.radio_buttons :attribute, ["First", "Second"] %>
所以要让f.collection_radio_buttons
使用我必须做的简单数组:
<%= f.collection_radio _buttons :attribute, ["First", "Second"], :to_s, :to_s %>
这“有效”,但看起来很hacky。有没有更简洁的方法来引用数组的值,而不是在上面调用.to_s
?
【问题讨论】:
试试:itself
。它只是返回自己:)
【参考方案1】:
也许这是一个旧帖子,但如果它对其他人有帮助,那就在这里。现在在 2019 年,我正在使用 Rails 5 应用程序,我有一个表单,我必须在其中显示给定属性的两个单选按钮。
我有一个辅助方法:
def get_company_segments
company = current_user.branch.company
[
[company.various_segment_fee, 'various', 'Varios'],
[company.metal_segment_fee, 'metal', 'Metal']
]
end
Output:
#=> [["12.6", "various", "Varios"], ["10", "metal", "Metal"]]
然后在我的表单视图中,我有类似的内容:
<%= form.collection_radio_buttons(:segment, get_company_segments, :second, :last) do |segment| %>
<div class="form-check form-check-inline">
<%= segment.radio_button(class: 'form-check-input', id: "agreement_segment_#segment.object.second" %>
<%= segment.label(class: 'form-check-label', for: "agreement_segment_#segment.object.second") %>
</div>
<%- end %>
它会呈现如下内容:
HTML 看起来像这样:
<div class="form-check custom-radio form-check-inline">
<input class="form-check-input" id="agreement_segment_various" data-fee="12.6" type="radio" value="various" name="agreement[segment]">
<label class="form-check-label" for="agreement_segment_various">Varios</label>
</div>
<div class="form-check custom-radio form-check-inline">
<input class="form-check-input" id="agreement_segment_metal" data-fee="10" type="radio" value="metal" name="agreement[segment]">
<label class="form-check-label" for="agreement_segment_metal">Metal</label>
</div>
我希望它可以成为其他人的一个很好的参考。 ?
【讨论】:
以上是关于Rails 表单在数组而不是对象上使用 collection_radio_buttons的主要内容,如果未能解决你的问题,请参考以下文章
Rails,如何从控制器提交 PayPal 请求,而不是表单,URL 编码
在 Rails 3 中,我使用的是 jQuery Tokenize 插件,但表单提交的是值,而不是 id