假设我有一个has_and_belongs_to_many关系,我有帖子和类别。查找某个类别中的所有帖子或特定帖子所属的所有类别很简单。但是,如果我想查找属于多个类别的帖子列表,该怎么办?例如,Rails中关于安全性主题的帖子列表,我可能想要属于“安全性”和“Rails”类别的帖子。
是否可以使用构建到ActiveRecord中的finder方法执行此操作,还是需要使用SQL?有人可以解释一下吗?
答案 0 :(得分:0)
您可以使用includes
或joins
,例如:
@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以了解joins
和includes
之间的区别,以便您可以决定哪种情况更好。
答案 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 */
这并没有完全解决,我希望如果我在这里表现出我的无知,有人会说出来。