1
比方說,我已經得到了以下(簡化)數據模型:根據關係的計算字段確定查詢範圍?
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
一個實際的數據庫字段,似乎並不可能的。我希望避免將這些計算方法添加到數據庫本身,但是如果它是唯一的方法... ...
在此先感謝!
在這裏做一個選擇是迫使Rails獲取所有的event_dates,將它們翻譯爲Ruby對象,然後檢查每一個以查看它們是否有可用點。我會尋找一個面向數據庫的解決方案來避免這種資源浪費。 – MrYoshiji
完全同意 - 謝謝。事實上,一位幫助過此事的朋友提出了完全相同的觀點。從長遠來看,最好讓數據庫在這裏完成繁重的工作,而不是Rails。 – nlh