【问题标题】:Rails: multi find out if a category has members with a single fast queryRails:多查找一个类别是否有具有单个快速查询的成员
【发布时间】:2023-01-24 03:53:50
【问题描述】:

给定模型:

  • Member -> belongs_to :category
  • Category -> has_many :members

我想知道每个类别是否有成员,风格如下:

----------------------
| name | has_members |
======================
| cat1 | true        |
| cat2 | false       |
| cat3 | true        |
----------------------

以下解决方案实现这一目标的速度太慢:

  • Category.eager_load(:members).map{|s| s.members.any?}
  • Category.includes(:members).map{|s| s.members.any?}

这将是一个计数器缓存的用例,但我想知道这是否可以通过一些智能 ARel 或 SQL 来解决。

实现这一目标的最快方法是什么?

【问题讨论】:

    标签: ruby-on-rails activerecord has-many


    【解决方案1】:

    如果你像这样反转问题怎么办:

    Member.includes(:category).order(:category_id).distinct.map{ |m| m.category !=nil ? m.category.name : "" }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2023-03-17
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多