假设我有一个 has_and_belongs_to_many 关系,其中我有帖子和类别。查找某个类别中的所有帖子或特定帖子所属的所有类别很简单。但是,如果我想查找属于多个类别的帖子列表怎么办?例如,关于 Rails 中安全主题的帖子列表,我可能想要属于“安全”和“Rails”类别的帖子。
是否可以使用 ActiveRecord 中内置的 finder 方法来做到这一点,或者我需要使用 SQL 吗?有人可以解释一下吗?
假设我有一个 has_and_belongs_to_many 关系,其中我有帖子和类别。查找某个类别中的所有帖子或特定帖子所属的所有类别很简单。但是,如果我想查找属于多个类别的帖子列表怎么办?例如,关于 Rails 中安全主题的帖子列表,我可能想要属于“安全”和“Rails”类别的帖子。
是否可以使用 ActiveRecord 中内置的 finder 方法来做到这一点,或者我需要使用 SQL 吗?有人可以解释一下吗?
我对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 */
这还没有完全解决,我希望如果我在这里表现出我的无知,有人会说出来。
您可以使用includes
or 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'")
我还建议检查此joins
railscast 以了解and之间的区别includes
,以便您可以决定哪种情况更好。