2011-03-09 87 views
0

我必须定义一个关联,它似乎很好地适合“has_one/belongs_to”存储区。Rails 3没有外键的流量数据的关联

情况是这样的,我有一个表格,每行对应于给定月份和年份的月度统计数据。我希望能够在我的模型上定义某些关联,例如record.prior_monthrecord.prior_year,这些关联对应于当前记录的上个月/年。

我想不出有什么聪明的方法来做到这一点,因为保持每个月需要更新记录吨数的外键没有任何意义。

我总是可以处理控制器中的逻辑,但如果可以的话,我宁愿保留模型。

谢谢! Mike

回答

0

因此,不是储存月份/年份,还储存月份+年份* 12。所以2011年3月是24135

这样,你知道下个月是21436,你可以很容易地在你的记录分页。

TrafficGroup.order("month_calculated").paginate(:page=>params[:page]) 
+0

感谢杰西 - 分页是伟大的,但我不认为它会帮助我的最终任务。我们的目标不是显示这些记录,而是让用户对它们进行分页,就像执行像上个月某个度量标准更改等计算一样。 – nillkill 2011-03-09 20:48:31

+0

啊,那么你的问题更多的是如何适当地分组大量的数据。不是如何显示已分组的数据。 – 2011-03-09 20:50:30

+0

是的 - 虽然添加朱利安日期类型列的想法并不错。它肯定会对我正在做的其他事情有所帮助。谢谢! – nillkill 2011-03-09 21:00:59

0

是这样的吗?

class MyModel < AR::Base 
    def prior_month 
    created_at.month 
    end 

    def prior_year 
    created_at.year 
    end 
end 

example = MyModel.last 
example.prior_year 
#=> 2010 
example.prior_month 
#=> 3 
0

您可以通过几种方法做到这一点。假设月份存储在模型中。

我最喜欢的是范围,因为它可以很好地与其他协会玩。

举例来说,你可以这样做:

class TrafficRecord < ActiveRecord::Base 
    scope :only_month, lambda {|month| where :month => month} # this should also contain join conditions 

    def prior_month 
    self.class.only_month(self.month - 1) #decrement your month 
    end 
end