Помощник collection_radio_buttons
ищет массив объектов, которые будут реагировать на ввод text_method
, который затем используется для сгенерированной метки переключателя.
БыстрыйГрязный способ заставить ваш код работать - это превратить ваш массив хэшей в массив объектов, которые отвечают на методы, названные в честь ключей, т.е. мы можем превратить их в 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 %>