2009-09-08 1 views
0

매우 간단한 문제가 있지만 좋은 해결책을 찾을 수 없습니다. 나는 루비의 조회 코드가 (예를 들어, 국가에 살고있는 학생) : RoR 조회 예

# State lookup (id, name) 
class State < ActiveRecord::Base 
    has_many :students 
end 

# Class that belogs to a state 
class Student< ActiveRecord::Base 
    belongs_to :state 
end 

및보기/학생/new.html.erb보기

, 나는 드롭 다운으로 상태를 표시합니다

<p> 
    <%= f.label :state %><br /> 
    <%= f.collection_select :state, State.find(:all), 
     :id, :name, :prompt => "Select a State" %> 
    </p> 

지금까지 너무 좋아,하지만 난 오류가있어 저장 쳤을 때 :

State(#37872860) expected, got String(#21001240) 

나는 Student.create에 상태 개체 대신 문자열을 보내고있다로, 합리적인 것 같다 무엇을 방법.

RoR에서 이것을 처리하는 가장 좋은 방법은 무엇입니까? 컨트롤러에서 State 객체를 손으로 가져 와서 매개 변수 해시로 바꾸는 것이 더 나은 방법이라고 생각합니다.

대단히 감사합니다. 페르난도

답변

0
<%= f.collection_select :state_id, State.find(:all), :id, :name, :prompt => "Select a State" %> 

:state_id하지 :state

+0

JDL에게 감사 드려요.하지만 JDL을 사용해 보았습니다. 렌더링 단계에서 # 에 대해 'state_id'메서드가 정의되지 않았습니다. – Fernando

+0

보기에서 form_tag 줄을 게시 할 수 있습니까? – jdl

+0

jdl, 대단히 감사합니다. 문제는 제 학생 테이블에서 상태 열의 이름이 'state_id'가 아니라 'state'였습니다. 이로써 : view에서 참조 될 경우 state_id가 떨어집니다. 당신의 힌트가 테이블에있는 문제를 찾았 기 때문에 그것을 다시 만들고 이제는 당신이 말한대로 작동하고 있습니다 (f.collection_select : state_id, ... 그대로). 감사합니다; fernando – Fernando

0

State.find (모든)은 정말 컨트롤러가 아닌 뷰에서 일어나는 일이어야한다. 뷰에서 모델에 액세스 할 수 있다고 생각조차하지 않습니다. 이는 문제 일 수 있습니다. 당신이 당신의 컨트롤러 같은 것을 할 경우 :

@states = State.find (모든)

그런 다음 당신이보기에 변수 @states를 사용

는 "국가를 선택하여"%>

도움이 되었기를 바랍니다.