我有一个对象数组,我希望能够使用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 %>
感谢您的任何帮助
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