【发布时间】:2014-10-16 23:58:59
【问题描述】:
我有一个具有“max_attendees”属性的模型 AvailableSlot。 AvailableSlot has_many BookedSlots。
我正在寻找所有仍然可用的 AvailableSlots(其中预定的槽位小于 max_attendees")
我试过了
scope :with_capacity, -> { joins('LEFT OUTER JOIN booked_slots on booked_slots.available_slot_id = available_slots.id')
.group('available_slots.id').having("booked_slots.count < available_slots.max_attendees") }
和
#AvailableSlot.rb
def self.with_capacity
self.select{ |s| s.booked_slots.count < s.max_attendees }
end
但是这些返回数组,第一个不能做“.count”,第二个解决方案不能做“.limit(3)”,因为返回的数据不是活动记录。
最后一个问题:对于做类似的事情,
AvailableSlot.joins(:booked_slots).where("booked_slots.length < ?, max_attendees)
我不能使用 .length,因为它不是booked_slots 下的列。在使用 .count、.length 等 activerecord 方法的同时使用这种 .joins.where 格式的方法是什么?
【问题讨论】:
标签: sql ruby-on-rails activerecord ruby-on-rails-4 orm