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

Rails 5.1 button_to helper生成查询字符串而不是隐藏表单

Rails:从 submit_tag 更改表单操作

表单传递字符串而不是浮点数

在 Ruby on Rails/JS 中以模式呈现新表单而不是新页面