2013-10-09 2 views
0

이벤트의 이벤트 유형에 대한 선택 상자가 있습니다. 이벤트는 event_type에 속하며 event_type에는 많은 이벤트가 있습니다. 문제는 내가 그것을 제출할 때, 그것은 이벤트 유형의 ID가 아니라 그것의 이름을 제출하는 것입니다,레일에서 루비와 함께 선택 상자를 올바르게 사용하려면 어떻게해야합니까?

<%= f.select :event_type, options_from_collection_for_select(EventType.all, :id, :name, @event.id), :placeholder => 'Select an event type' %> 

을하지만 : 여기에 내가 선택 상자가 무엇. 그럼 어떻게 이드가 아닌 이름을 제출하게할까요? 더 이상 코드를 볼 필요가 있다면 감사합니다

답변

1

에 대한 문서는이 이벤트 유형을로드 제출 후에는 ID를 사용할 수있다 다시이 같은 컨트롤러 포스트 행동 :

selected_type = EventType.find(params[:event_type] 

그것은 데이터베이스를 유지하는 좋은 방법이기도 컨트롤러 호출, 그래서 거기에 EventType.all 문을 넣어주세요 그리고 당신이했던 것처럼 지역 또는 클래스 변수로 전달 event.

실제로 ID 대신 양식에서 이름을 전달하려는 경우 전화에서 :id 부분을 options_from_collection_for_select(@event_types, :name, :name, @event.event_type.name)과 같은 것으로 바꿀 수 있습니다. 이 값은 고유해야합니다.

방법은 다음과 같이 작동

options_from_collection_for_select(collection, value_method, text_method, selected = nil) 

그래서 첫 번째 매개 변수는 모든 옵션을 포함, 두 번째는 HTML 옵션의 value 필드에 넣고 그 옵션 개체 내에서 값을 정의합니다 (이 인입니다 양식에 의해 제출 된), 세 번째는 사용자에게 표시되는 텍스트를 정의하고 최종 매개 변수는 선택한 항목의 value을 정의합니다 (예를 들어 항목을 편집하는 경우). 마지막 매개 변수의 경우 이벤트 태그 인 event_type id 또는 HTML 태그의 value을 설정했기 때문에 이름을 사용해야합니다.

일부 방법에 대한 예제를 보려면 ApiDock 또는 Rails 자습서 같은 페이지를 사용하십시오. http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select

+0

도움을 주셔서 감사합니다! created_type을 selected 액션에 넣을까요? – Snubber

+0

selected_type은 이벤트 유형 값을 알고 있어야하므로 실제로 이벤트 값 중 하나 여야합니다. 그것은'belongs_to'와'has_many'를 각각 사용하여 event_type 클래스와 관계가 있어야하므로'@ event.event_type.id'를 사용하여 액세스 할 수 있습니다.그 작업이 완료되면 예, 이벤트 객체를 시작할 때 또는 편집 할 때 생성 액션에서 사용하십시오. – KappaNossi

+0

릴레이션이 올바르게 설정 되었다면,이 스 니펫을 사용하여 삶을 편하게 만드십시오 :'<% = f.select : event_type_id, @ event_types.map {| t | [t.name, t.id]} %>'. 이것은 편집시에 자동적으로 올바른 옵션을 선택해,'Event.create (params [: event])'를 사용해 액션 내의 릴레이션을 포함한 오브젝트를 작성할 수 있도록합니다. 당신은 여전히 ​​수동으로 내 게시물에서 정보를 사용하여 그것을 할 수 있습니다. – KappaNossi

2

options_from_collection_for_select의 두 번째 매개 변수는 양식과 함께 제출되는 값입니다. :id이 있으니 :name으로 변경하십시오.

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select

(하지만 이상한 것은이해야 할 것처럼이 보인다 -. 이벤트 유형 ID를 일반적으로 저장 것)

+1

일반적으로 선택 상자에서 ID를 저장하여 사용자 선택을 db에 유지합니다. 이름이 필요할 경우 언제나 ID를 사용하여 db에서 이름을 찾을 수 있습니다. 이 방법으로 일을하는 한 가지 이유는 기존 레코드를 엉망으로 만들지 않고도 이벤트 유형의 이름을 변경할 수 있다는 것입니다. – sockmonk

1

당신이 이름을 전달하려는 경우이 값 방법에 이름을 전달한다 여기

<%= f.select :event_type, options_from_collection_for_select(EventType.all, :name, :name, @event.id), :placeholder => 'Select an event type' %> 

options_from_collection_for_select

관련 문제