2012-10-14 2 views
0

여러 게시물에 링크하거나 링크 할 수있는 Post 클래스를 정의합니다. 이렇게하려면 PostLink 클래스를 추가하여 post_topost_from을 지정합니다. 레일즈가 정의 된 'has_many'관계에 대해 열을 찾지 못했습니다.

나는 rails g model post_link from_post:integer to_post:integer에 의해 물론 rake db:migratePostLink 클래스를 생성하고 클래스에

belongs_to :from_post, :class_name => 'Post' 
belongs_to :to_post, :class_name => 'Post' 

을 추가했다.

그리고 has_many :post_links이 내 Post 클래스에 있습니다.

저는 rails consolePost.new.post_links으로 인쇄되었고 nil이 인쇄되어 예상됩니다.

SQLite3::SQLException: no such column: post_links.post_id: SELECT "post_links".* 
FROM "post_links" WHERE "post_links"."post_id" = 1 

그래서 사람이 알고 왜 데이터베이스 post_link에 저장 한 후 액세스 할 수 없습니다 : 그러나 난 후, 그것은 다음과 같은 오류 메시지를 출력 p.post_links를 실행 한 후

p = Post.new 
p.save 

등을 사용하여 Post 저장?

+0

schema.rb를 제공해 주실 수 있습니까? –

+0

'post_link'에'post_id' 컬럼을 정의 했습니까? 그리고 schema.rb 파일을 제공 할 수 있습니까? –

답변

1

Posthas_many :post_links 연결은 post_links의 외래 키가 기본적으로 post_id 인 것으로 가정하기 때문에 오류가 발생합니다. from_post_idto_post_id을 사용하고 있으므로 "보낸 사람"게시물과 "받는 사람"게시물에 대한 post_links를 그룹화하여 게시물에 대한 전체 post_links 집합을 얻는 방법을 찾아야합니다. 당신이 하나의 그룹으로 협회에 세트를 특별한 SQL을 제공 할 수있는 또 다른 옵션으로

class Post < ActiveRecord::Base 

    has_many :from_post_links, :class_name => 'PostLink', :foreign_key => :from_post_id 
    has_many :to_post_links, :class_name => 'PostLink', :foreign_key => :to_post_id' 

    def post_links 
    from_post_links + to_post_links 
    end 

end 

:

한 가지 방법은 함께 세트를 추가 Post 및 추가 방법에 두 개의 연결을 정의 할 수 검색어 :

class Post < ActiveRecord::Base 

    has_many :post_links, :finder_sql => Proc.new { 
    %Q{ 
     SELECT * 
     FROM post_links pl 
     WHERE pl.to_post_id = #{id} 
     OR pl.from_post_id = #{id} 
    } 
    } 
+0

작품! 고마워요! – Guanlun

관련 문제