Подтвердить что ты не робот

Выберите тег, указав выбранную опцию (или перемещая элемент массива в индекс 0)

Скажем, что я запрашиваю список фруктов, а затем собираю только идентификатор и имя фрукта в @fruit.

[32, "apple"],
[8, "bannana"],
[10, "cantelope"],
[11, "grape"],
[15, "orange"],
[41, "peach"],
[22, "watermelon"]

@fruit используется в помощнике Select. "яблоко", находящееся в индексе 0 @fruit, будет выбранным значением (первый вариант) выбора. Это составленный пример, но по умолчанию я всегда буду знать, что "оранжевый" по имени (а не по id). Мне нужно "оранжевое", чтобы быть выбранным значением тега select (первый вариант).

": prompt = > 'orange'" просто добавляет второй экземпляр "оранжевого" в выборе. Все, что я нашел в Google, похоже, связано с добавлением лишнего значения или пробела в список.

Поскольку индекс 0 массива всегда становится выбранным значением (если в помощнике выбора не используется приглашение или пробел), есть ли способ найти индекс, содержащий имя "оранжевый" (@fruit [x]. name == 'orange') и переместить его в индекс 0, сохранив существующий альфа-список в остальной части списка? Итак, массив @fruit будет выглядеть так:

@fruit[0]    [15, "orange"],
@fruit[1]    [32, "apple"],
@fruit[2]    [8, "bannana"],
@fruit[3]    [10, "cantelope"],
@fruit[4]    [11, "grape"],
@fruit[5]    [41, "peach"],
@fruit[6]    [22, "watermelon"]

Единственное, что я могу сейчас подумать, это перебрать @fruit, и если "оранжевый" будет найден, добавьте его в новый массив. Затем повторите попытку через массив @fruit и добавьте все, что не имеет названия "оранжевый". Я не уверен, как это выписать, но похоже, что это сделает то, что я ищу. Может быть, есть какой-то простой способ сделать это, я пропущу (указать, какой индекс в массиве должен быть первым выбранным вариантом)?

Спасибо!

4b9b3361

Ответ 1

Смотрите здесь: http://guides.rubyonrails.org/form_helpers.html#making-select-boxes-with-ease

Если вы используете существующие помощники, вы можете указать по id, который вы хотите выбрать. В частности, этот пример:

<%= options_for_select([['Lisbon', 1], ['Madrid', 2]], 2) %>

output:

<option value="1">Lisbon</option>
<option value="2" selected="selected">Madrid</option>

Вы говорите, что не знаете, какой вариант "оранжевый" по ID. Если вы хотите найти ID для "оранжевого" в массиве фруктов, это сделало бы это, тогда вы можете использовать помощника:

(@fruit.detect { |i| i[1] == 'orange' } || []).first

Ответ 2

Вы можете использовать options_from_collection_for_select в теге select для выбора параметра по умолчанию. Например:

<%= select_tag 'state',
    options_from_collection_for_select(@fruits, 'id', 'name', 15),
    :include_blank => true %>

По умолчанию будет выбран "Оранжевый". Документы API.