2013-07-09 5 views
0

나는 기본 테이블 조인이 작동하도록해야합니다. 이것은 처음으로 데이터베이스 작업을하는 것이므로 뭔가 간단한 것을 놓치고있는 좋은 기회가 있습니다. 레일 3.2.13을 사용하고 있습니다.간단한 레일 조인 예

두 개의 테이블이 있습니다. 첫 번째는 피드이며 RSS 피드 목록과 태그와 같은 여러 가지 특성이 포함되어 있습니다. 두 번째는 feed_entries이며 개별 스토리가 포함되어 있습니다. feed_entries.feed_name 열은 feeds.name 열의 요소와 일치합니다. 다음은 모델 파일입니다.

class Feed < ActiveRecord::Base 
    attr_accessible :color, :lastUpdated, :name, :posted, :read, :tag, :url 
    has_many :feed_entries, foreign_key: "feed_name", primary_key: "name" 
end 

class FeedEntry < ActiveRecord::Base 
    attr_accessible :guid, :name, :published_at, :status, :summary, :url 
    belongs_to :feed, foreign_key: "name", primary_key: "name" 
end 

foreign_key 및 primary_key는 이해할 수 없지만 읽은 내용을 기반으로 올바르게 설정되어 있다고 생각합니다.

현재 특정 피드의 모든 항목을 FeedEntry.where (feed_name : 'BBC') 또는 유사하게 표시 할 수 있습니다. tag = Daily와 같이 피드 테이블의 특정 열과 일치하는 항목을 표시하려고합니다. 나는이 명령을 시도했다 : 더 feed_entries.tag이 (가 피드의 열이다)이 없기 때문에

Feed.joins(:feed_entries).where("feed_entries.tag = ?", 'Daily') #error 
FeedEntry.joins(:feed).where("feeds.tag = ?", 'Daily') #empty 
Feed.joins(:feed_entries).where(tag: 'Daily') #no columns from feed_entries 

첫 번째 오류가 있습니다. 두 번째 항목은 항목을 반환하지 않습니다. 세 번째 항목은 적절한 수의 항목을 반환하지만보다 중요한 feed_entries 테이블이 아닌 피드 테이블에있는 열만 반환합니다.

내가 누락 된 부분을 누구든지 설명 할 수 있습니까?

답변

1

내가 볼 수있는 한 가지 문제는 관계 자체에 있습니다. 외래 키가 있어야한다 ... 'FEED_NAME'이 도움이

belongs_to :feed, foreign_key: "feed_name", primary_key: "name" 

희망을 ... 당신의 FeedEntry 모델에서 봐

belongs_to :feed, foreign_key: "name", primary_key: "name" 

!