2014-10-29 2 views
0

이 작업을 수행하는 방법에 대해 머리를 감쌀 수 없으며 누군가가 도움을 줄 수 있기를 기대합니다.이 작업이 간단 할 것이라고 확신합니다!habtm 연결을 통해 데이터 찾기

나는 레일즈 앱에서 처음부터 "태그 클라우드"(railscasts.com에 게시 된 에피소드와 상당히 유사)를 구현하려고하는데, 이는 단지 "구름" ", 반환 된 결과와 관련이 있습니다. 예를 들어 인덱스보기에서 사용자가 결과를 필터링했다고 가정 해 봅시다. 내 욕망은 필터링 된 결과 집합의 태그 만 표시하는 것입니다.

내가이 개 그들 사이에 HABTM 협회를 포함하는 모델이 : 내 제 컨트롤러에서

class Article < ActiveRecord::Base 
has_and_belongs_to_many :tags 
... 
end 

class Tag < ActiveRecord::Base 
has_and_belongs_to_many :articles 
... 
end 

을, 나는 나에게 내 index 액션에 표시 결과를주는 @articles 변수가 있습니다. 내가 내가 할 수있을 거라고 생각하는 것은

@article = Article.all

은 관련 태그를 반환 희망, article.tags @ 전화 :이 설명의 목적 들어, 그것의 가정 해 봅시다 모든 기사에 대해 결과 내에서. 그런 다음 그룹화하고 반복하여 클라우드에 표시 할 수있을 것이라고 생각했습니다. 그러나이 메서드는 "정의되지 않은 메서드 오류"를 throw합니다.

나는 레일 콘솔에서 재생 내가 실행하면 것을 발견했습니다

>> @articles = Article.find(1) 
>> @articles.tags 

그런 다음 그 기사와 관련된 모든 태그가 나에게 돌아갑니다. 왜 그걸 부르면 안돼?

내가 직접 내가 좋아하는 뭔가를 할 거라고 SQL을 사용하는 것이었다 경우 : 그 내가 일을하려고하지만, 레일 - 쿼리 용어를 사용하고 무엇을 단순화 동등한 것 같아요

SELECT name, COUNT(*) 
FROM tags INNER JOIN articles_tags on ... INNER JOIN articles on... 
WHERE // filtered results 
GROUP BY name 

합니다.

아이디어가 있으십니까?

Tag.joins(:articles) 

같은 태그가 atricles 적용 :

답변

0

당신은에 의해 기사가 태그를 얻을 수 있습니다.

Article.joins(:tags) 

당신은, 당신에게 가입 표를 세밀하게 제어 할 수 있으므로 그 대신 HABTM의를 통해 has_many을 사용하여 선호 this question

+0

이 올바른 방향으로 절 지적 확인할 수 있습니다. 아래 작업 : Tag.joins (: articles) .where (id : @artcles) – Wilko