답변:
이것은해야합니다 :
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
options_for_select가 없으면 더 좋은 방법입니다. 어떤 상황에도 좋고 양식 편집에도 좋습니다.
현재 인스턴스의 올바른 속성을 사용하십시오 (예 :) @work.project_id.
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag또한 작동하기 때문에 가장 좋은 대답 입니다. 정말 도움이되었습니다.
options_for_select(..., f.object.project_id )
이 모든 답변의 문제점은 레코드를 편집하려고하더라도 필드를 기본값으로 설정한다는 것입니다.
당신은 당신의 기존 값에 기본값을 설정해야하고 단지 당신이 값이없는 경우 실제 디폴트로 설정합니다. 이렇게 :
f.select :field, options_for_select(value_array, f.object.field || default_value)
익숙하지 않은 사람은 f.object.field항상 사용하고 f.object필드 이름을 끝에 추가하십시오.
select2JS 플러그인 과도 작동합니다 . 동일한 형식으로 레코드를 만들거나 편집하고 특히 자리 표시 자 텍스트와 함께 select2를 사용하는 경우 완벽하게 작동합니다.
이 시도:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]작동하지 않지만 예제는 작동했습니다.
params [: pid]가 문자열 인 경우, 형식에서 온 경우 사용해야합니다.
params[:pid].to_i
선택 목록에서 올바른 항목을 선택하려면
@project제목 대신 데이터베이스 테이블의 id로 변수 를 채우면 이 코드가 form.select도우미 의 뒷면에 추가되었습니다 . selected: @project감사합니다 @danengle
나는 일이를 얻고 나는 올바른으로뿐만 아니라 "선택"HTML 속성을 추가하는 데 필요한 것을 찾을 수 없었다 <option>태그하지만 또한 받는 <select>태그입니다. select 태그의 선택된 속성에 대한 MDN 문서는 다음과 같습니다.
selected- 부울 속성은 특정 옵션을 처음에 선택할 수 있음을 나타냅니다.
이는 코드가 다음과 같아야 함을 의미합니다.
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
또는 f.select의 첫 번째 인수가 특정 속성을 가져 오기 때문에 컨트롤러에서 : project_id 속성을 설정할 수 있습니다.
f 객체를 인쇄하려고하면 선택한 항목을 얻을 수 있는지 검사 할 수있는 f.object가 있음을 알 수 있습니다 (모든 레일 버전> 2.3에 해당).
logger.warn("f #{f.object.inspect}")
따라서 다음 스크립트를 사용하여 올바른 옵션을 선택하십시오.
: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 : value 를 사용해야 합니다 .
<%= 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' %>
위의 Mike Bethany의 답변은 새 레코드를 만들 때 기본값을 설정하고 사용자가 선택한 값을 편집 양식에 계속 표시하도록 노력했습니다. 그러나 모델 유효성 검사를 추가했는데 양식을 제출할 수 없었습니다. 다음은 필드에서 모델 유효성 검사를 수행하고 편집 모드에서 사용자가 선택한 값뿐만 아니라 기본값을 표시하는 데 도움이되었습니다.
<div class="field">
<%= f.label :project_id, 'my project id', class: "control-label" %><br>
<% if @work.new_record? %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], true), {}, required: true, class: "form-control" %><br>
<% else %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], @work.project_id), {}, required: true, class: "form-control" %><br>
<% end %>
</div>
모델 검증
validates :project_id, presence: true
이것은 당신을 위해 작동합니다. {:value => params[:pid] }html_options 변수로 전달 됩니다.
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>