2012-05-19 3 views
25

나는 두 개의 has_one 관계 : requesterfriend을 사용하는 레일스 모델을 가지고 있습니다. 콘솔에서 내가 사용하는 경우 :레일 클래스 이름과 외래 키가있는 has_one

f = FriendRequest.all 
f[0].requester 

을 나는 ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: users.requester_id: SELECT "users".* FROM "users" WHERE "users"."requester_id" = 4 LIMIT 1 를 얻을.

클래스 이름 및 레코드를 지정하는 키와 'has_one'관계를 지정하는 방법을 모르겠습니다. 내 모델 :

class FriendRequest < ActiveRecord::Base 
    has_one :requester, :class_name => "User", :foreign_key => "requester_id" 
    has_one :friend, :class_name => "User", :foreign_key => "friend_id" 
end 

어떻게하면됩니까? belongs_to 관계에서 나는 동일한 것을 사용하는데, 분명히 has_onebelongs_to으로 대체하십시오. 감사!

답변

27
has_one :requester, :class_name => "User", :foreign_key => "requester_id" 

(당신이 게시 코드에서)이 줄은 requesterUser이며, 테이블 usersfriend_requests 기록을 향해 외래 키는 열 requester_id을 포함해야 함을 나타냅니다. 레일 오류 메시지에 열 requester_id이 존재하지 않는다고 나와 있습니다 (migration을 통해 생성해야 함).

class AddRequesterIdToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :requester_id, :integer 
    end 
end 

그리고 rake db:migrate으로 그들에게 마이그레이션을 실행 :이 경우

은, 그것은 마이그레이션을 생성합니다

rails generate migration AddRequesterIdToUsers requester_id:integer 

를 사용합니다.

has_onebelongs_to의 차이점과 그 사용 방법에 대한 자세한 내용은 Rails Relation Guide을 참조하십시오.