이 작업을 수행하는 방법에 대해 머리를 감쌀 수 없으며 누군가가 도움을 줄 수 있기를 기대합니다.이 작업이 간단 할 것이라고 확신합니다!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 적용 :
이 올바른 방향으로 절 지적 확인할 수 있습니다. 아래 작업 : Tag.joins (: articles) .where (id : @artcles) – Wilko