2014-12-04 3 views
0

habtm 관계로 태그 모델과 관련된 포스트 모델이있는 레일 4가 있습니다. 태그에는 이름 필드와 카테고리 필드가 있습니다. 여러 태그는 동일한 카테고리를 가질 수 있습니다.레일의 관련 모델 속성을 기준으로 한 필터 인덱스 뷰

"foo"카테고리에 속한 태그가 하나 이상있는 게시물 만 표시하는보기가 필요합니다. Foo는 정적이며 항상 "foo"로 유지됩니다.

나는 내 게시물 컨트롤러에이 코드를 사용하여 작동하게 할 수있었습니다 : 내 코드를 작업하는 읽기 정말 추한 모습

def myview 
    ids = [] 
    Tag.where(category: 'foo').each do |tag| 
    tag.posts.each do |post| 
     ids << post.id 
    end 
    end 
    @posts = Post.where(id: ids).all 
end 

에도 불구하고.

레일스는 "@posts = Post.where 태그 카테고리에 'foo'.all'이 포함되어 있지만 반드시 알아낼 수는 없습니다. 나는 아주 obvoius 뭔가를 놓치고있어 확신 해요.

+0

Post.includes (: tags) .where ("tags.category =?", "foo")' –

+0

@PavittarGill pry (main)> Post.includes (: tags) .where ("tags.category = "", "foo") 게시물로드 (4.2ms) SELECT "posts". * FROM "posts"WHERE (tags.category = 'foo') SQLite3 :: SQLException : 해당 열 없음 : tags.category : SELECT "posts". * FROM "posts"WHERE (tags.category = 'foo') => # TopperH

답변

1

Post.joins (: 태그) 어디에요 ('tags.category =? ","foo는 ") 모든

주석의 대답은, 예를 들어, 조회 할 않았다 곳입니다. tag에 의해 작성되었지만 tag과 관련된 일부 정보를 포함하고 싶을 수도 있습니다. includes을 사용하면 N+1 problem을 피할 수 있습니다.