【问题标题】:Using collection_radio_buttons on an object array in rails在rails中的对象数组上使用collection_radio_buttons
【发布时间】:2019-10-31 22:42:07
【问题描述】:

我有一个对象数组,我希望能够使用 collection_radio_button 显示它们,但似乎 collection_radio_buttons 仅适用于数组或 ActiveRecord 对象。有没有办法使用对象数组构建一个 collection_radio_button?

这是我的对象数组

[{:image_url=>"https://assets.braintreegateway.com/payment_method_logo/visa.png?environment=sandbox", :card_type=>"Visa", :last_4=>"0004", :expiration_month=>"10", :expiration_year=>"2019"}, {:image_url=>"https://assets.braintreegateway.com/payment_method_logo/visa.png?environment=sandbox", :card_type=>"Visa", :last_4=>"0004", :expiration_month=>"11", :expiration_year=>"2019"}]

这是我尝试编写的代码,但它不起作用

<%= collection_radio_buttons("cards", :card, @payment_methods, item_wrapper_tag: false) do |b|
   b.label { b[:last_4]}
end %>

感谢任何帮助

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5


    【解决方案1】:

    collection_radio_buttons 助手正在寻找一组对象,这些对象将响应 text_method 输入 - 然后用于生成的单选按钮标签。

    让您的代码工作的快速'n'dirty方法是将您的哈希数组转换为响应以键命名的方法的对象数组,即我们可以将它们转换为OpenStructs:

    @payment_methods = @payment_methods.map { |pm| OpenStruct.new(pm) }
    

    传递这个新的 OpenStructs 数组现在应该打印出您要查找的内容,而无需额外的块:

    <%= collection_radio_buttons(:cards, :card, @payment_methods, :last_4, :last_4) %>
    

    您可能希望/需要更改其他输入 - :card:cards:last_4 - 以获得适合您正在构建的表单的所需结果。

    另一种选择是自己简单地构建单选按钮,而不使用内置的 collection_radio_buttons 帮助器...类似于:

    <% @payment_methods.each do |pm| %>
      <%= radio_button_tag 'cards[card]', pm[:last_4] %>
      <%= label 'cards[card]', pm[:last_4] %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 2017-03-11
      • 2023-01-27
      • 2017-07-15
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2019-11-12
      • 2018-03-03
      相关资源
      最近更新 更多