Вот фрагмент кода, который я использую сейчас:
<%= f.select :project_id, @project_select %>
Как изменить его, чтобы значение по умолчанию равнялось params[:pid]
при загрузке страницы?
Вот фрагмент кода, который я использую сейчас:
<%= f.select :project_id, @project_select %>
Как изменить его, чтобы значение по умолчанию равнялось params[:pid]
при загрузке страницы?
Это должно сделать это:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
Используйте правильный атрибут текущего экземпляра (например, @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
Rails 3.0.9
select options_for_select([value1, value2, value3], default)
Проблема со всеми этими ответами заключается в том, что они устанавливают поле по умолчанию, даже если вы пытаетесь отредактировать свою запись.
Вам необходимо установить значение по умолчанию для существующего значения, а затем только установить его фактическое значение по умолчанию, если у вас нет значения. Например:
f.select :field, options_for_select(value_array, f.object.field || default_value)
Для тех, кто не знаком с f.object.field
, вы всегда используете f.object
, а затем добавляете свое имя в конец.
Попробуйте следующее:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
Я нашел решение, и я обнаружил, что я довольно неопытный в RoR.
Внутри контроллера, который управляет описанным выше видом, добавьте это:
@work.project_id = params[:pid] unless params[:pid].nil?
если params [: pid] - это строка, которая, если она получена из формы, то вам, вероятно, придется использовать
params[:pid].to_i
для выбора правильного элемента в списке выбора
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
<%= f.select :project_id, options_from_collection_for_select(@project_select,) %>
Я не мог заставить это работать и обнаружил, что мне нужно добавить атрибут "selected" html не только к правильному тегу <option>
, но также к тегу <select>
. Документы MDN по выбранному атрибуту тега select говорят:
выбран. Логический атрибут указывает, что изначально может быть выбран конкретный параметр.
Это означает, что код должен выглядеть так:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
В качестве альтернативы вы можете установить атрибут: project_id в контроллере, поскольку первый аргумент f.select извлекает этот конкретный атрибут.
Если вы попытаетесь напечатать объект f, вы увидите, что есть f.object, который может быть исследован для получения выбранного элемента (применим для всех версий rails > 2.3)
logger.warn("f #{f.object.inspect}")
используйте следующий script, чтобы выбрать правильный вариант:
:selected => f.object.your_field
Уже объяснено, попытается привести пример
пусть список выбора будет
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' %>
Это должно сработать для вас. Он просто передает {:value => params[:pid] }
в переменную html_options.
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>