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] }

Я бы, скорее всего, инвертировал ваш хэш, чтобы указать ключевое значение на значение

Ответ 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) %>