Rails select helper - выбранное значение по умолчанию, как?

Вот фрагмент кода, который я использую сейчас:

<%= f.select :project_id, @project_select %>

Как изменить его, чтобы значение по умолчанию равнялось params[:pid] при загрузке страницы?

Ответ 1

Это должно сделать это:

<%= f.select :project_id, @project_select, :selected => params[:pid] %>

Ответ 2

Используйте правильный атрибут текущего экземпляра (например, @work.project_id):

<%= f.select :project_id, options_for_select(..., @work.project_id) %>

Ответ 3

Rails 3.0.9

select options_for_select([value1, value2, value3], default)

Ответ 4

Проблема со всеми этими ответами заключается в том, что они устанавливают поле по умолчанию, даже если вы пытаетесь отредактировать свою запись.

Вам необходимо установить значение по умолчанию для существующего значения, а затем только установить его фактическое значение по умолчанию, если у вас нет значения. Например:

f.select :field, options_for_select(value_array, f.object.field || default_value)

Для тех, кто не знаком с f.object.field, вы всегда используете f.object, а затем добавляете свое имя в конец.

Ответ 5

Попробуйте следующее:

    <%= f.select :project_id, @project_select, :selected => f.object.project_id %>

Ответ 6

Я нашел решение, и я обнаружил, что я довольно неопытный в RoR.

Внутри контроллера, который управляет описанным выше видом, добавьте это:

@work.project_id = params[:pid] unless params[:pid].nil?

Ответ 7

если params [: pid] - это строка, которая, если она получена из формы, то вам, вероятно, придется использовать

params[:pid].to_i  

для выбора правильного элемента в списке выбора

Ответ 8

<%= f.select :project_id, @project_select, :selected => params[:pid] %>

Ответ 9

<%= f.select :project_id, options_from_collection_for_select(@project_select,) %>

Ответ 10

Я не мог заставить это работать и обнаружил, что мне нужно добавить атрибут "selected" html не только к правильному тегу <option>, но также к тегу <select>. Документы MDN по выбранному атрибуту тега select говорят:

выбран. Логический атрибут указывает, что изначально может быть выбран конкретный параметр.

Это означает, что код должен выглядеть так:

f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}

Ответ 11

В качестве альтернативы вы можете установить атрибут: project_id в контроллере, поскольку первый аргумент f.select извлекает этот конкретный атрибут.

Ответ 12

Если вы попытаетесь напечатать объект f, вы увидите, что есть f.object, который может быть исследован для получения выбранного элемента (применим для всех версий rails > 2.3)

logger.warn("f #{f.object.inspect}")

используйте следующий script, чтобы выбрать правильный вариант:

:selected => f.object.your_field 

Ответ 13

Уже объяснено, попытается привести пример

пусть список выбора будет

select_list = { eligible: 1, ineligible: 0 }

Таким образом, следующий код приводит к

<%= f.select :to_vote, select_list %>

<select name="to_vote" id="to_vote">
  <option value="1">eligible</option>
  <option value="0">ineligible</option>
</select>

Итак, чтобы выбрать параметр по умолчанию, мы должны использовать selected: значение.

<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>

если can_vote? возвращает true, он устанавливает : 1, тогда первое значение будет выбрано вторым.

select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
  <option value="1">eligible</option>
  <option selected="selected" value="0">ineligible</option>
</select>

если параметры выбора - это просто список массивов вместо hast, тогда выбранный будет просто значением, которое нужно выбрать, например, если

select_list = [ 'eligible', 'ineligible' ]

теперь выбранный будет принимать только

<%= f.select :to_vote, select_list, selected: 'ineligible' %>

Ответ 14

Это должно сработать для вас. Он просто передает {:value => params[:pid] } в переменную html_options.

<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>