Rails区域查询以匹配多个habtm记录

问题描述 投票:0回答:1

我有如下设置,

Post
- has_and_belongs_to_many :tags

Tag
- has_and_belongs_to_many :posts

问题:

我想查找所有具有socialinformative标签的帖子在其中,我还可以使用他们的ID来假设12。使用arel或ActiveRecord或纯SQL。

我可以使用以下方法找到具有posts标签的anypost_tags[:tag_id].in([1, 2])

我可以使用以下方法找到具有posts标签的nonepost_tags[:tag_id].not_in([1, 2])

但是我不能:post_tags[:tag_id].in_all([1, 2])这是因为一条记录无法匹配所有标签ID。

我该怎么做?

ruby-on-rails ruby activerecord has-and-belongs-to-many arel
1个回答
0
投票
找到答案!

posts = Arel::Table.new(:posts) posts_tags = Arel::Table.new(:posts_tags) tag_ids = [1, 2] ids_predicate = posts. project(posts[:id]). join(posts_tags).on( posts[:id].eq(posts_tags[:post_id]) ). where( posts_tags[:tag_id].in(tag_ids) ). group(posts[:id]). having( posts_tags[:tag_id].count.eq(tag_ids.count) ) Post.where(posts[:id].in(ids_predicate))

我认为很酷!
© www.soinside.com 2019 - 2024. All rights reserved.