2014-10-29 62 views
0

我無法圍繞如何做到這一點,希望有人能夠幫助 - 我相信這將是簡單的事情!通過協會尋找數據

我試圖在我的rails應用程序中從頭開始實現「標籤雲」(與在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 

在我的文章控制器,我有一個@articles變量,它給我顯示在我的指標作用的結果。對於這種解釋的目的,讓我們說這是:

@article = Article.all

什麼我想我能夠做的就是打電話@ article.tags,希望它會返回相關的標籤爲結果中的所有文章。我認爲我可以對它們進行分組和遍歷,並在雲中顯示它們。但是,這會引發「未定義的方法錯誤」。

我已經打在軌控制檯和發現,如果我跑:

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

則與該文章相關的所有標籤退給我。你爲什麼不能在.all上打電話?

如果我是使用SQL直接我會做這樣的事情:

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

我想這是什麼,我試圖做的,但使用Rails的查詢行話簡化等效。

任何想法?

回答

0

你可以有文章標籤:

Tag.joins(:articles) 

同樣適用於有標籤atricles。

Article.joins(:tags) 

您可能希望通過替代的habtm使用的has_many,這讓你在連接表的更多控制,檢查this question

+0

這我指出了正確的方向。下面的工作:Tag.joins(:articles).where(id:@artcles) – Wilko 2014-10-30 19:26:45