Rails - создание тега select из хеша объекта
Мне нужно создать поле выбора из значений, доступных в Hash.
Например, у меня есть "вещь", а "вещь" имеет множество полей статуса:
1 => 'State A'
2 => 'State B'
доступный с помощью метода на предмет.
Как я могу создать тег select из этого?
Ответы
Ответ 1
Так же, как сказал Шроквелл:
Hash.each |a|
возвращает массив формы a = [key, value]
, поэтому для хэша @status_fields
вы можете написать:
<%= collection_select('thing', 'status', @status_fields, :first, :last) %>
В качестве альтернативы, если вы хотите, чтобы ключ отображался в списке выбора, а значение указывало на значение списка выбора, тогда:
<%= collection_select('thing', 'status', @status_fields, :last, :first) %>
Это выберет опцию, заданную thing.status или ничего, если возвращается nil
Если вы хотите просто создать любой выбор, не привязанный к объекту, используйте
<%= select_tag('name', options_from_collection_for_select(@status_fields, :first, :last, '2')) %>
где '2' - индекс желаемого выбора
PS: У меня нет достаточной репутации, чтобы просто изменить исходный пост или прокомментировать его
Ответ 2
вы можете сделать что-то вроде
select "foo", "bar", @hash_object
или
select "foo", "bar", @hash_object.map { |h| [h.key, h.value] }
Я бы, скорее всего, инвертировал ваш хэш, чтобы указать ключевое значение на значение
Ответ 3
выбрать вспомогательный метод примет хеш в форме { text_displayed_in_select => select_value }
, поэтому вы, вероятно, захотите инвертировать этот хеш.
Ответ 4
Hash.each |a|
возвращает массив формы a = [key, value]
, поэтому для хэша @status_fields
вы можете написать:
<%= collection_select('thing', 'status', @status_fields, :first, :last) %>
В качестве альтернативы, если вы хотите, чтобы ключ отображался в списке выбора, а значение указывало на значение списка выбора, тогда:
<%= collection_select('thing', 'status', @status_fields, :last, :first) %>