Rails select helper-기본적으로 선택된 값, 어떻게?


182

다음은 지금 사용중인 코드입니다.

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

params[:pid]페이지가로드 될 때 기본값을 동일하게 수정하는 방법 은 무엇입니까?


페이지를로드 할 때, : project_id가 설정되어 있지 않은 경우, 또는 매개 변수 해시에서 select 값을 : pid로 반환하려는 경우 기본 프로젝트를 선택할지 확실하지 않습니다.
Tilendor

답변:


223

이것은해야합니다 :

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

5
매개 변수 options_for_select가 없으면 더 좋은 방법입니다. 어떤 상황에도 좋고 양식 편집에도 좋습니다.
Adriano Resende

키는 다음과 같습니다. 함수를 확인하십시오 (options_for_select () 대 f.select. 다른 함수를 기억하십시오)
FlyingV

126

현재 인스턴스의 올바른 속성을 사용하십시오 (예 :) @work.project_id.

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

4
이것은 select_tag또한 작동하기 때문에 가장 좋은 대답 입니다. 정말 도움이되었습니다.
stephenmurdoch

7
또한 시도해 볼 수 있습니다options_for_select(..., f.object.project_id )
8

정말 고마워! 다른 모든 대답은 변수를 통해 선택하는 방법을 말하지 않습니다.
Mike Belanger

52

레일 3.0.9

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

기본값을 구분하는 쉼표 전에 값 배열 주위에 닫는 대괄호가 표시 될 때까지이 솔루션을 파악할 수 없었 습니다. 여기에서이 대괄호를 놓쳤습니다.value3], default
BigRon

33

이 모든 답변의 문제점은 레코드를 편집하려고하더라도 필드를 기본값으로 설정한다는 것입니다.

당신은 당신의 기존 값에 기본값을 설정해야하고 단지 당신이 값이없는 경우 실제 디폴트로 설정합니다. 이렇게 :

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

익숙하지 않은 사람은 f.object.field항상 사용하고 f.object필드 이름을 끝에 추가하십시오.


3
그것은 깨끗한 해결책이며, 언급 한 것처럼 새 값에만 기본값을 설정하고 편집시 현재 값을 설정하려고합니다.
count0

1
나는 이것이 오래된 스레드라는 것을 알고 있지만 그것을 만날 수있는 누군가를 위해이 답변은 select2JS 플러그인 과도 작동합니다 . 동일한 형식으로 레코드를 만들거나 편집하고 특히 자리 표시 자 텍스트와 함께 select2를 사용하는 경우 완벽하게 작동합니다.
cdouble.bhuck

@Mike Bethany와 같이 이것이 답변으로 인정되는 답변이어야한다고 생각합니다. 다른 모든 답변은 레일 접근 방식이 양식을 재사용하는 경우 새 레코드에 대해서만 양식이 렌더링된다고 가정합니다. Kudos Mike
Erick Castrillo 2016 년

22

이 시도:

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

Rails 4를 사용하면 params[:pid]작동하지 않지만 예제는 작동했습니다.
Eric Wanchic

"f.fields_for"Thanks 내부에 부분을 사용하고 있기 때문에 이것은 나를 위해 일했습니다.
휴고

11

params [: pid]가 문자열 인 경우, 형식에서 온 경우 사용해야합니다.

params[:pid].to_i  

선택 목록에서 올바른 항목을 선택하려면


이 답변을 통해 문제를 정확히 찾아 낼 수있었습니다. 내 선택 상자는 동적이며 데이터베이스에서 컬렉션을 가져옵니다. 항목의 ID가 아닌 제목으로 기본 선택 항목을 채우려 고했습니다. 이 답변은 그 문제를 확인하는 데 도움이되었고 @project제목 대신 데이터베이스 테이블의 id로 변수 를 채우면 이 코드가 form.select도우미 의 뒷면에 추가되었습니다 . selected: @project감사합니다 @danengle
Christopher Warrington

10

나는 해결책을 찾았고 RoR에서 경험이 거의 없다는 것을 알았습니다.

위에서 설명한 뷰를 관리하는 컨트롤러 내부에 다음을 추가하십시오.

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

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

3

나는 일이를 얻고 나는 올바른으로뿐만 아니라 "선택"HTML 속성을 추가하는 데 필요한 것을 찾을 수 없었다 <option>태그하지만 또한 받는 <select>태그입니다. select 태그의 선택된 속성에 대한 MDN 문서는 다음과 같습니다.

selected- 부울 속성은 특정 옵션을 처음에 선택할 수 있음을 나타냅니다.

이는 코드가 다음과 같아야 함을 의미합니다.

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

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

0

또는 f.select의 첫 번째 인수가 특정 속성을 가져 오기 때문에 컨트롤러에서 : project_id 속성을 설정할 수 있습니다.


0

f 객체를 인쇄하려고하면 선택한 항목을 얻을 수 있는지 검사 할 수있는 f.object가 있음을 알 수 있습니다 (모든 레일 버전> 2.3에 해당).

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

따라서 다음 스크립트를 사용하여 올바른 옵션을 선택하십시오.

:selected => f.object.your_field 

0

이미 설명했습니다. 예를 들어 봅니다.

선택 목록을 보자

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' %>

0

위의 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

-2

이것은 당신을 위해 작동합니다. {:value => params[:pid] }html_options 변수로 전달 됩니다.

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

하지만 선택에서 적절한 항목을 선택하지 않습니다 S
totocaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.