2
我有事件模型以下屬性的列的數學運算(我引用唯一的問題相關的屬性),該模型是由API調用週期性地填充,調用外部服務(谷歌日曆):如何做分組的行
colorid: number # (0-11)
event_start: datetime
event_end: datetime
我需要統計分組活動,由colorid分組的持續時間。我有事件實例的方法來計算單個事件的持續時間:
def event_duration
((event_end.to_datetime - event_start.to_datetime) * 24 * 60).to_i
end
現在,我需要做的是這樣的:
event = Event.group(:colorid).sum(event_duration)
但對於我這個多年平均值的工作,只要我得到錯誤event_duration列不存在。我的想法是多一個屬性添加到事件模式「event_duration」,並計算和更新事件記錄創建時該屬性,在這種情況下,我會叫「event_duration」一欄,我可能是強麥到該屬性使用總和。但我不確定這是否合適,並且「系統解決方案」,只要我想要模型數據反映來自API調用的「原始」接收數據,並在模型數據的頂部進行所有數學和統計。
非常感謝,它的作品auto-magicall年。問題是,我是Rails&Ruby初學者,我不明白這個代碼,事件只是幾行。我必須特別檢查「&:something」的魔法,爲什麼使用「group_by」而不是「group」。 –
@DavidLister:請檢查了這一點:[符號冒號shorcut(http://stackoverflow.com/questions/1961030/ruby-ampersand-colon-shortcut) – byakugie
thanx的答覆,我花了一些時間研究。讓我總結一下,如果我得到了正確的結果: 'duration_by_color_id = {}' 初始化新散列 'grouped_events = Event.all.group_by(&:colorid)' 獲取multidim。包含所有事件的數組,這些事件由colorid DB列分組,因爲此塊將針對每個對象執行,並且我只調用colorid,這會返回行的值。 'grouped_events.each做| colorid,活動|' 開始迭代陣列。對於每個colorid鍵,我有一系列事件。 'duration_by_color_id [colorid] = events.collect(&:event_duration).sum' 給我與每個對象和值數組。 –