Rails与has_and_belongs_to_many匹配

时间:2012-07-22 08:48:19

标签: sql ruby-on-rails has-and-belongs-to-many

假设我有一个has_and_belongs_to_many关系,我有帖子和类别。查找某个类别中的所有帖子或特定帖子所属的所有类别很简单。但是,如果我想查找属于多个类别的帖子列表,该怎么办?例如,Rails中关于安全性主题的帖子列表,我可能想要属于“安全性”和“Rails”类别的帖子。

是否可以使用构建到ActiveRecord中的finder方法执行此操作,还是需要使用SQL?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

您可以使用includesjoins,例如:

@result = Post.includes(:categories).where("categories.name = 'Security' OR categories.name = 'Rails'")

@result = Post.joins(:categories).where("categories.name = 'Security' OR categories.name = 'Rails'")

我还建议您检查this railscast以了解joinsincludes之间的区别,以便您可以决定哪种情况更好。

答案 1 :(得分:0)

我对rails没有任何了解,但我正在尝试使用某些sql进行类似的操作。这对我们任何一方都可能有用,也可能不对......

我有一个文章表和一个应用类别的查找表。要获得一篇具有“安全”类别和“rails”类别的文章,我当然是将文章表加入类别表,但也是第二次重新加入。类别表的每个连接使用表别名中的提示(即语言或主题)  伪代码:

SELECT article.*,
category_language.category_id,
category_topic.category_id

FROM category category_language
INNER JOIN article ON category_language.articleID = article.articleID 
INNER JOIN category category_topic ON article.articleID = category_topic.articleID 

WHERE category_language.category_id in (420) /* rails */
and category_topic.category_id in (421) /* security */

这并没有完全解决,我希望如果我在这里表现出我的无知,有人会说出来。