我有一个方法可以正常工作(使用rails 3和PostgreSQL);我只是想知道是否有可能使它与数据库无关:
FarmGatePrice.average :price, :group => 'EXTRACT(WEEK FROM date)'
据我了解,从日期中提取一周ISO编号的方法始终是特定于数据库的。
我可以使用像虚拟属性这样的东西:周见here,但似乎:group选项只接受原始SQL。我也见过this solution,但它不符合我的需要。 另一种方法是使用数据库视图,甚至添加一个由回调方法填充的:week列 - 但我不想弄乱我的架构。
那么,任何线索?
答案 0 :(得分:1)
不 - 如果您需要按周进行分组,最好将其直接保存在数据库中,作为通过before_save
回调设置的额外列。
正如您所说,从日期中提取一周是非常重要的,因此最好让Rails处理这个而不是数据库。这也将提高性能。
<强>更新强>
示例回调:
def Thing
before_save :set week
private
def set_week
self.week = self.date.cweek
end
end