2014-06-20 2 views
2

난 내 레일 애플 리케이션에 내장 된 간단한 메시징 시스템이 있습니다.레일 4-- 사용자 예상, 문자열이

표는 다음과 같습니다

create_table :messages do |t| 
    t.integer :from_id 
    t.integer :to_id 
    t.string :subject 
    t.text :message 

    t.timestamps 
end 

모델도 간단하다

belongs_to :to_id, class_name: "User", :foreign_key => "to_id" 
belongs_to :from_id, class_name: "User", :foreign_key => "from_id" 

내가하려고하면 메시지 양식 그러나, 나는 type mismatch을 받고, 그리고하고 제출하면 레일즈 콘솔에 새 메시지를 작성하면 동일한 오류가 발생합니다.

User(#-588576898) expected, got String(#-603326958) 

은 분명히 단순히 user.id 값이 아닌 User 객체를 기대하고있다. 이 모델을 만든 방법에 오류가 있다고 가정합니다.

어디서 잘못 되었나요?

편집 :

양식 코드는 다음과 같습니다. 그러나, 레일 콘솔에서 직접 Message를 만들 때 저도 같은 문제가 발생하고 있습니다, 그래서 나는이 모델의 가정입니다 :

<%= form_for @message, :url => {:controller => "messages", :action => "create"}, :html => {:class => 'form-horizontal form', :role => 'form'} do |f| %> 
<%= f.select :to_id, options_from_collection_for_select(User.all, :id, :first_name) %> 
<%= f.text_field :subject %> 
<%= f.text_area :message %> 
<%= f.submit class: "btn btn-large btn-primary" %> 
<% end %> 
: 여기
> m = Message.new 
=> #<Message id: nil, from_id: nil, to_id: nil, subject: nil, message: nil, created_at: nil, updated_at: nil> 
> m.from_id = 1 
ActiveRecord::AssociationTypeMismatch: User(#-582821898) expected, got Fixnum(#-597136528) 

는 라벨과 HTML을 제거, 폼의
+2

콘솔이나 양식으로 메시지를 작성하는 방법을 우리에게 알려주지 않았습니다. 어떻게 잘못되었는지 알 수 있습니까? –

+0

예, 질문에 메시지 양식을 추가하십시오. –

답변

5

연관 이름 (belongs_to의 첫 번째 인수)은 외래 키가 들어있는 열의 이름과 같지 않아야합니다. 예는 현재 연결에 대해 생성 된 접근 방법은 속성에 대한 접근 방법을 섀도 잉되는 약자로서

belongs_to :to, class_name: "Message" 

들어

.

+0

감사합니다. – user101289

4

관계에 다른 이름을 지정하십시오. 아마도 to_user 및 from_user 일 수 있습니다. 그런 다음 메시지를 만들 때이 이름을 사용할 수 있습니다.