我有货运,旅行和预订。
cargo_request has_many行程(并非所有行程都属于freight_request)
旅行有很多预订(所有预订都属于旅行)
我正在尝试为freight_requests编写一个范围,以获取未预订的所有cargo_requests。这包括没有旅行的货运申请,以及确实有旅行但没有预订旅行的货运申请。
目前我有
has_many :bookings
scope :not_booked, where("trips.id NOT IN (SELECT trip_id FROM bookings)")
belongs_to :trip
has_many :trips
scope :not_booked, joins(:trips) & Trip.not_booked
scope :no_trip, where("freight_requests.id NOT IN (SELECT freight_request_id FROM trips)")
问题是no_trip代码没有返回没有跳闸的cargo_requests(它什么都不返回)。
任何人对我如何做到这一点都有任何想法? Thx提前
答案 0 :(得分:0)
我猜你忘记了Trip模型中的include:no_trip scope。
scope :no_trip, includes(:trips).where("freight_requests.id NOT IN (SELECT freight_requests_id FROM trips)")
我还想注意,此查询会遍历所有行程记录,如果您拥有大量数据,这些记录可能会很昂贵。 FreightRequest模型上的计数器缓存可能是一种更快的方式,在这种情况下你的:no_trip范围将是:
scope :no_trip, where(:trips_counter => 0)