0

我有一个工作得很好的方法(使用 rails 3 和 PostgreSQL);我只是想知道是否有可能使其与数据库无关:

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

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

我可以使用虚拟属性 :week 之类的东西,如此处所示但似乎 :group 选项只接受原始 SQL。我也看到了这个解决方案,但它不符合我的需求。另一种方法是使用数据库视图,甚至添加一个由回调方法填充的 :week 列 - 但我不想弄乱我的模式。

那么,有什么线索吗?

4

1 回答 1

1

Nope - if you need to do a group by week, you're better off saving it directly in the database as an extra column set via a before_save callback.

As you say, extracting a week from a date is non-trivial, and so it's best to let Rails handle this rather than your database. This will improve performance too.

Update:

Example callback:

def Thing

  before_save :set week

  private
     def set_week
        self.week = self.date.cweek
     end
end
于 2011-06-30T16:17:57.480 回答