ruby-on-rails - Rails 4 ActiveRecord 查询自引用 has_many 关联上的空关联

标签 ruby-on-rails ruby ruby-on-rails-4

设置如下:

# app/models/booking.rb

class Booking < ActiveRecord::Base
  # Associations
  belongs_to :parent_booking, class_name: "Booking"
  has_many :child_bookings, class_name: "Booking", foreign_key: "parent_booking_id"
end

这不是必需的关系,因此并非所有预订都有parent_booking 或child_bookings。

尝试创建一个查询,该查询返回所有没有任何 child_booking 的预订的 ActiveRecord::Relation,无论是否存在parent_booking。

以下示例(基于 this SO question )适用于不同模型之间存在关系的场景。但是,由于记录位于同一个表中,因此它不适用于自引用关系。相反,它返回所有没有 Parent_booking 的 Bookings 的 ActiveRecord::Relation。

Booking.includes(:child_bookings).where(bookings: { parent_booking_id: nil })

以下内容返回正确的对象,但效率极低,因为它必须查询数据库中的每条记录。此外,它以数组形式返回,而不是 ActiveRecord::Relation(更关心效率低下)。

Booking.select { |b| b.child_bookings.empty? }

我很可能忽略了一个简单的解决方案,但广泛的搜索尚未发现任何结果。谢谢!

最佳答案

我会添加一个 counter cache然后查询 Booking.where(child_booking_count: 0)

关于ruby-on-rails - Rails 4 ActiveRecord 查询自引用 has_many 关联上的空关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36925333/

相关文章:

sql - Rails 虚拟属性搜索或 sql 组合列搜索

jquery - Rails-Jquery : Updating a Database Field on a click event

ruby-on-rails - Rails ActiveSupport::TestCase - 彩色输出

ruby-on-rails - 在 Rails 4 中格式化我的 JSON 输出

error-handling - 404、500 的自定义错误页面,但默认的 500 错误消息来自哪里?

ruby-on-rails - 如何通过Rails实现基于websocket的推送服务?

css - 具有动态呈现列表时如何将列一分为二

ruby-on-rails - 如何在不锁定 MacVim 的情况下在 MacVim 中运行 Ruby 规范和/或测试?

ruby - 如何在低内存系统上使用 RVM 编译 ruby​​?

ruby-on-rails - 如何从 YAML 文件收集条目?