我有以下模型:
activity.rb
tag.rb
tagging.rb
标签是事件和标签的连接模型。
我想搜索具有 2 个或更多标签的事件。我如何在 Rails 中执行此操作?
例如:
我有 tag1 = Christmas,tag2 = Florida,tag3 = John
如果存在,我想找到 tag1、tag2 和 tag3 存在的 Activity。
[编辑]
我最终做了什么:
tags = [tag1, tag2, tag3]
activities = []
tags.each do |tag|
activities << tag.activities
end
activities.flatten.group_by { |activity| activity.id }
如果任何组值的大小等于 tags.size,则该事件包含所有标签。
最佳答案
如果你想要那些应该存在特定标签的事件,那么试试下面的命令
selected_activity = Activity.all.select do |activity|
%w(Christmas Florida John).all? do |name|
activity.tags.include?(name)
end
end
一旦它运行,我们总是可以重构它以减少被触发的查询数量...
关于sql - 如何查询具有 3 个标签的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096558/