设置如下:
# 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/