在导轨中的对象数组上使用collection_radio_buttons

问题描述 投票:0回答:1

我有一个对象数组,我希望能够使用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个回答
0
投票

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

使代码工作的快速而肮脏的方法是将哈希数组变成对象数组,这些对象响应以键命名的方法,IE可以通过以下方法将它们变成OpenStructs:

text_method

现在通过这个新的OpenStructs数组应该可以打印出您正在寻找的内容,没有多余的块:

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

您可能希望/需要更改其他输入-<%= collection_radio_buttons(:cards, :card, @payment_methods, :last_4, :last_4) %> :card:cards-以获得所需的结果,该结果将与您正在构建的表单一起使用。

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

collection_radio_buttons
© www.soinside.com 2019 - 2024. All rights reserved.