次の (簡略化された) データ モデルがあるとします。
class Location
include Mongoid::Document
has_many :event_dates
end
class EventDate
include Mongoid::Document
has_many :event_sessions
belongs_to :location
def total_spots
self.event_sessions.sum("max_participants")
end
def booked_spots
self.event_sessions.sum("participants_count")
end
def available_spots
self.total_spots - self.booked_spots
end
end
class EventSession
include Mongoid::Document
belongs_to :event_date
field :max_participants
field :participants_count
end
私は場所のすべてのイベントの日付を簡単に取得できることを知っています:
Location.event_dates
しかし、クエリの範囲を限定して、たとえばイベントの日付と利用可能なスポットを取得するにはどうすればよいでしょうか? すなわち
Location.event_dates.where(available_spots > 0)
available_spots
は計算された値であり、 の実際のデータベース フィールドではないため、それは不可能のEventDate
ようです。それらの計算方法をDB自体に追加することは避けたいと思っていましたが、それが唯一の方法である場合....
前もって感謝します!