2009-10-23 40 views
2

我正在尋找關於使用Active Record(Rails)管理時態數據的想法/信息。一個例子是emplyoment的歷史(1月份100%工作,但從2月份到現在只有80%)。這可以很容易地與傳統的'有很多:工作部分'解決。但還有另一種情況,用戶可以計劃一些待辦事項列表,用戶可以隨時更改(此待辦事項從一月至三​​月有效,另一次從一月至四月有效,然後在五月至八月更改詳細信息)。帶Rails/Active Record的時間數據

我知道,這種要求沒有銀彈解決方案,但我想收集一些關於此主題的想法/內容/插件。看起來這個領域的鐵路運營沒有做太多的事情,至少沒有公開的東西。

請,如果你有一個想法,鏈接或想法,請刪除一個簡短的答案!

鏈接至今:

回答

1

你必須要多做一點什麼細節。

例如,您需要什麼「分辨率」?你打算記錄每一天的工作時間嗎?或者僅僅是平均的單調工作量?每週,也許?

另外,你想在假期和病假期間做什麼?

(編輯 - 回答下面的評論)

在你的情況我會去用類似這樣的一個模型:

class WorkSlice < ActiveRecord::Base 
    belongs_to :employee 
    validates_presence_of employee_id, start_date, end_date, percentage 

    def calculate_hours 
    #employees might have different hours per day (i.e. UK has 7, Spain has 8) 
    employee.hours_per_day * self.calculate_days 
    end 

    def calculate_days 
    #days between start_day and end_day that are not sick days, holidays or weekends 
    workdays = ... #this depends on how you model holidays, etc 
    return workdays * self.percentage 
    end 
end 

你需要的唯一關聯是與「僱員」,我所知道的。例如,僱員的方法可以讓你看到eployee在給定日期的「自由」。

+0

可以忽略這樣的事情病假,節假日等emplyoment_history說: '開始:2009.01.01結束:2009.04.30,pensum 100%' ,'start:2009.05.01 end:infinity,pensum:80%' 問題是,這些'時間'數據必須以某種方式進行管理,什麼時間範圍的開始和結束,哪些是當前條目等等。 有關聯時甚至會變得更糟。 – reto 2009-10-23 11:46:20

+0

編輯我的答案,顯示一個可能的實現 – kikito 2009-10-26 16:32:53

0

「我知道,有這些樣的要求沒有一勞永逸的解決方案,」

但這取決於你如何銀需要你的子彈一點是。不管怎樣,您可能會發現以下內容也很有趣:

(a)Hugh Darwen和C.J. Date撰寫的「TSQL2概述和分析」。鏈接位於www.thethirdmanifesto.com底部的「論文」部分。 (b)「時間數據和關係模型」是由同一作者加上Nikos Lorentzos撰寫的一本完整的書。包含一個不同的,完整的建議和非常合理的理由,爲什麼他們認爲提案更好。 (c)您可以在shark.armchair.mb.ca/~erwin

2

的基礎上從(b)的想法中找到一個名爲SIRA_PRISE的實現,我們需要保留所有的歷史數據對數據庫記錄的更改,並能夠按時間查詢數據,而不會影響查詢當前數據的性能。

我們設想的解決方案是一個緩慢變化的維度類型2,包含歷史記錄表。該實現是一個需要PostgreSQL 9.3的Ruby gem,並且很好地適用於使用時間框架擴展它的Active Record(例如Foo.as_of(1.year.ago).bars)。

您可以在這裏找到代碼:https://github.com/ifad/chronomodel :-)

相關問題