如何查找其has_many通过对象包括某个列表的所有对象的记录?

咆哮的石头

我有一个典型的标签和任何对象关系:

class Tag < ActiveRecord::Base
   attr_accessible :name
   has_many :tagazations
   has_many :projects, :through => :tagazations
end

class Tagazation < ActiveRecord::Base
  belongs_to :project
  belongs_to :tag
  validates :tag_id, :uniqueness => { :scope => :project_id }
end

class Project < ActiveRecord::Base
   has_many :tagazations
   has_many :tags, :through => :tagazations
end

这里没什么特别的:每个项目都带有一个或多个标签。
该应用程序具有搜索功能:您可以选择某些标签,而我的应用程序应向您显示所有标有所有提及标签的项目。所以我得到了必要的tag_ids的数组,然后陷入了这样一个简单的问题

迈克·坎贝尔

要在一个查询做到这一点,你会希望利用普通的双不存在SQL查询,基本上不求x的所有的Y

在您的实例中,您可以执行以下操作:

class Project < ActiveRecord::Base
  def with_tags(tag_ids)
    where("NOT EXISTS (SELECT * FROM tags
      WHERE NOT EXISTS (SELECT * FROM tagazations
        WHERE tagazations.tag_id = tags.id
        AND tagazations.project_id = projects.id)
      AND tags.id IN (?))", tag_ids)
  end
end

另外,您可以使用count,group和have,尽管我怀疑第一个版本会更快,但可以随时进行基准测试:

def with_tags(tag_ids)
  joins(:tags).select('projects.*, count(tags.id) as tag_count')
    .where(tags: { id: tag_ids }).group('projects.id')
    .having('tag_count = ?', tag_ids.size)
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何不包括最新记录,而是来自Rails中某个对象的所有记录?

来自分类Dev

VisualVM:如何查找堆中对象的大小,包括其字段中引用的所有对象?

来自分类Dev

rails 通过记录访问所有 has_many

来自分类Dev

Mongoid:如何查询has_many对象数大于0的所有对象

来自分类Dev

如何通过has_many关系创建指定类型的对象?

来自分类Dev

Rails,ActiveRecord,has_many:through:查找没有关联的所有记录

来自分类Dev

通过最相似的has_many查找记录

来自分类Dev

如何通过记录获取具有确切指定的has_many的记录?

来自分类Dev

Rails has_many通过查询-查找除子集以外的所有子集

来自分类Dev

Rails-活动记录:查找所有具有某些属性的has_many关联计数的记录

来自分类Dev

如何通过Rails通过has_many创建新记录?

来自分类Dev

仅在其所有has_many集合均具有特定列值的情况下查找对象

来自分类Dev

如何查找在has_many关联上具有嵌套属性的验证失败的记录?

来自分类Dev

如何在DataExtension对象中获取has_many对象?

来自分类Dev

Rails 如何查找存在 has_many 关系的记录?

来自分类Dev

如何从活动记录集中获取所有has_many关联

来自分类Dev

如何从活动记录集中获取所有has_many关联

来自分类Dev

通过Rails对象查询has_many以获取属性

来自分类Dev

通过has_many关联创建新对象时如何获取作用域属性

来自分类Dev

通过has_many关联创建新对象时如何获取作用域属性

来自分类Dev

Rails-如何通过has_many关联获取所有(唯一)数据?

来自分类Dev

如何使用Dart的Mirrors API获取对象的所有字段(包括其超类)?

来自分类Dev

你如何制造可以在 rspec 中查询的具有 has_many 关联的对象?

来自分类Dev

像“ has_many”这样的语法如何与Class对象交互?

来自分类Dev

Rails ActiveRecord通过has_many查找

来自分类Dev

通过关系在has_many中查找唯一记录的更好方法

来自分类Dev

ActiveRecord如何在Rails中通过has_many:through关系将现有记录添加到关联中?

来自分类Dev

如何通过其哈希码查找对象?

来自分类Dev

创建has_many时跳过记录:通过记录

Related 相关文章

  1. 1

    我如何不包括最新记录,而是来自Rails中某个对象的所有记录?

  2. 2

    VisualVM:如何查找堆中对象的大小,包括其字段中引用的所有对象?

  3. 3

    rails 通过记录访问所有 has_many

  4. 4

    Mongoid:如何查询has_many对象数大于0的所有对象

  5. 5

    如何通过has_many关系创建指定类型的对象?

  6. 6

    Rails,ActiveRecord,has_many:through:查找没有关联的所有记录

  7. 7

    通过最相似的has_many查找记录

  8. 8

    如何通过记录获取具有确切指定的has_many的记录?

  9. 9

    Rails has_many通过查询-查找除子集以外的所有子集

  10. 10

    Rails-活动记录:查找所有具有某些属性的has_many关联计数的记录

  11. 11

    如何通过Rails通过has_many创建新记录?

  12. 12

    仅在其所有has_many集合均具有特定列值的情况下查找对象

  13. 13

    如何查找在has_many关联上具有嵌套属性的验证失败的记录?

  14. 14

    如何在DataExtension对象中获取has_many对象?

  15. 15

    Rails 如何查找存在 has_many 关系的记录?

  16. 16

    如何从活动记录集中获取所有has_many关联

  17. 17

    如何从活动记录集中获取所有has_many关联

  18. 18

    通过Rails对象查询has_many以获取属性

  19. 19

    通过has_many关联创建新对象时如何获取作用域属性

  20. 20

    通过has_many关联创建新对象时如何获取作用域属性

  21. 21

    Rails-如何通过has_many关联获取所有(唯一)数据?

  22. 22

    如何使用Dart的Mirrors API获取对象的所有字段(包括其超类)?

  23. 23

    你如何制造可以在 rspec 中查询的具有 has_many 关联的对象?

  24. 24

    像“ has_many”这样的语法如何与Class对象交互?

  25. 25

    Rails ActiveRecord通过has_many查找

  26. 26

    通过关系在has_many中查找唯一记录的更好方法

  27. 27

    ActiveRecord如何在Rails中通过has_many:through关系将现有记录添加到关联中?

  28. 28

    如何通过其哈希码查找对象?

  29. 29

    创建has_many时跳过记录:通过记录

热门标签

归档