2

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

是否可以使用 ActiveRecord 中内置的 finder 方法来做到这一点,或者我需要使用 SQL 吗?有人可以解释一下吗?

4

2 回答 2

0

我对rails一无所知,但我正在尝试用一些sql做类似的事情。这可能对我们任何一个人都有效,也可能无效....

我有一个文章表和一个应用类别的查找表。为了获得具有“安全”类别和“导轨”类别的文章,我将文章表加入到类别表中,当然,还要再次加入它。类别表的每个连接都使用表别名(即语言或主题)伪代码中的提示:

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 */

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

于 2012-10-19T19:30:39.763 回答
0

您可以使用includesor 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'")

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

于 2012-07-22T09:03:43.287 回答