我无法解决如何实现这一目标并希望有人能够提供帮助 - 我相信这将是一件简单的事情!
我正试图实施一个"标签云"在我的rails应用程序中从头开始(与railscasts.com上发布的情节非常相似),增加了复杂性,我只想在我的" cloud"中显示标签,这些标签与返回的结果有关。例如,让我们说在索引视图中,用户已经过滤了结果。我的愿望是只显示过滤结果集中的标签。
我有两个模型,它们之间包含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,希望它能在结果中返回所有文章的关联标签。我以为我能够对它们进行分组和迭代,并在云中显示它们。但是,这会引发&#34;未定义的方法错误&#34;。
我一直在rails控制台玩,发现如果我跑:
>> @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-query-lingo。
有什么想法吗?
答案 0 :(得分:0)
您可以通过以下方式获取包含文章的标签:
Tag.joins(:articles)
同样适用于带有标签的atricles。
Article.joins(:tags)
您可能更喜欢使用has_many而不是habtm,这样可以更好地控制联接表,请检查this question