sql - 如何查询具有 3 个标签的事件?

标签 sql ruby-on-rails ruby ruby-on-rails-3

我有以下模型:

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/

相关文章:

ruby - 类主体可执行的意义是什么?

mysql - 将数据从 SQL Server 2008 R2 传输到 MySQL

SQL Server 2008 - 即使工作实际上已完成,查询也需要很长时间才能完成

ruby-on-rails - Ruby:使用 ruby​​ 连接到打印机

ruby - 散列的棘手变换 ->数组

ruby - 如何在新安装的 Mountain Lion 上安装 libv8 ruby​​ gem?

sql - 如何更新#temptable

c# - 将在 C# 中创建的哈希与 sql 匹配

ruby-on-rails - 您如何为下一个项目选择合适的 Ruby gem?

ruby-on-rails - rails 4 : How to change the output display page by page with helper