【问题标题】:What ActiveRecord query will return all of the records that have all of a given set of has_many relationships?什么 ActiveRecord 查询将返回具有所有给定 has_many 关系集的所有记录?
【发布时间】:2014-05-10 21:54:08
【问题描述】:

如何运行连接查询以仅查找包含所有 has_many 关系的记录?

例如:

产品有很多过滤器,过滤器有很多产品。 (product_filter_sets 是两个多对多关系的连接表。)

我想运行查询以查找包含使用过滤器 ID 的所有过滤器的产品。

目前我有这个查询

Product.joins(:product_filter_sets)
  .where(:product_filter_sets => { product_filter_id: [1,2,4,5] } )

但这会返回包含至少一个过滤器的所有产品。我想要的是包含所有过滤器的产品。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord


    【解决方案1】:

    将产品加入过滤器,按产品分组并选择在连接中出现的次数与您指定的过滤器数量一样多的产品:

    required_filter_ids = [1, 2, 4, 5]
    Product
      .joins(:product_filter_sets)
      .where(product_filter_sets: { product_filter_id: required_filter_ids })
      .group('products.id')
      .having("count(*) = #{required_filter_ids.length}")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多