ActiveRecord聚合函数:是否存在与数据库无关的'EXTRACT(WEEK from date)'?

时间:2011-06-30 15:37:46

标签: ruby-on-rails activerecord date aggregate-functions database-agnostic

我有一个方法可以正常工作(使用rails 3和PostgreSQL);我只是想知道是否有可能使它与数据库无关:

FarmGatePrice.average :price, :group => 'EXTRACT(WEEK FROM date)'

据我了解,从日期中提取一周ISO编号的方法始终是特定于数据库的。

我可以使用像虚拟属性这样的东西:周见here,但似乎:group选项只接受原始SQL。我也见过this solution,但它不符合我的需要。 另一种方法是使用数据库视图,甚至添加一个由回调方法填充的:week列 - 但我不想弄乱我的架构。

那么,任何线索?

1 个答案:

答案 0 :(得分:1)

不 - 如果您需要按周进行分组,最好将其直接保存在数据库中,作为通过before_save回调设置的额外列。

正如您所说,从日期中提取一周是非常重要的,因此最好让Rails处理这个而不是数据库。这也将提高性能。

<强>更新

示例回调:

def Thing

  before_save :set week

  private
     def set_week
        self.week = self.date.cweek
     end
end