如何查询具有3个标签的活动?

Mar*_*Pop 6 ruby sql ruby-on-rails ruby-on-rails-3

我有以下型号:

activity.rb

tag.rb

tagging.rb

标记是活动和标记的连接模型.

我想搜索一个包含2个或更多标签的Activity.我如何在rails中执行此操作?

例如:

我有tag1 =圣诞节,tag2 =佛罗里达,tag3 =约翰

我想找到tag1,tag2和tag3存在的Activity,如果它存在的话.

[编辑]

我最终做了什么:

tags = [tag1, tag2, tag3]

activities = []
tags.each do |tag|
  activities << tag.activities
end

activities.flatten.group_by { |activity| activity.id }
Run Code Online (Sandbox Code Playgroud)

如果任何组值的大小等于tags.size,则该活动包含所有标记.

Ism*_*reu 1

不确定,但这应该是实现它的更好的性能方式。但应该有更好的方法

tags_ids = [tag1, tag2, tag3].map(&:id)
ativities_ids = Tagging.where(tag_id: tags_ids).group("activity_id having count(tag_id) = #{tags_ids.size}").select('activity_id').map(&:activity_id)
Activity.find(activities_id)
Run Code Online (Sandbox Code Playgroud)

这将获得具有这些标签的活动,但它们也可以具有其他标签。