【发布时间】:2016-04-28 20:57:44
【问题描述】:
设置如下:
# 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_bookings 的 Bookings 的 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? }
我很可能忽略了一个简单的解决方案,但广泛的搜索还没有找到任何东西。谢谢!
【问题讨论】:
-
我认为这应该可行:
Booking.where({ parent_booking_id: nil }) -
@MuhammadYawarAli 返回没有父母的预订;我需要退回没有孩子的预订。
标签: ruby-on-rails ruby ruby-on-rails-4