Rails 3没有外键的流量数据关联

时间:2011-03-09 20:21:27

标签: ruby-on-rails associations

我必须很好地定义一个似乎不适合“has_one / belongs_to”存储桶的关联。

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

我想不出任何聪明的方法来做到这一点,因为维护每月必须更新大量记录的外键没有任何意义。

我可以随时处理控制器中的逻辑,但如果可以的话,我更愿意将其保留在模型中。

谢谢! 麦克

3 个答案:

答案 0 :(得分:0)

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

这样,您知道下个月是21436,您可以轻松地对您的记录进行分页。

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

答案 1 :(得分: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

答案 2 :(得分: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