2009-10-23 56 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 :-)