0

我有一個方法工作得很好(使用rails 3和PostgreSQL);我只是想知道是否有可能使其數據庫無關:ActiveRecord聚合函數:是否有一個數據庫不可知的'EXTRACT(WEEK from date)'?

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

據我瞭解,方法來提取日期一週ISO數值總是特定的數據庫。

我可以使用類似虛擬屬性:本週所看到here,但似乎:組選項只接受原始的SQL。我也看過this solution,但它不符合我的需求。 另一種方法是使用數據庫視圖,甚至可以添加一個由回調方法填充的周列:但我不希望混淆我的模式。

那麼,任何線索?

回答

1

都能跟得上 - 如果你需要每週做一組,你最好直接在數據庫中保存爲通過before_save回調設置一個額外的列。

正如你所說,從日期提取一個星期是不平凡的,所以最好還是讓Rails的處理這個問題,而不是你的數據庫。這也會提高性能。

更新:

例回調:

def Thing 

    before_save :set week 

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

對不起,但是當你說這會提高性能,我不明白這一點。存儲過程是否應該更好? ...並且它不回答問題的「如何」部分。 –

+1

我懷疑存儲過程會像簡單整數列上的索引一樣快。此外,存儲過程意味着把你的業務邏輯放到你的數據庫中 - 這不是Rails的方式(做一些谷歌搜索讀取圍繞它的參數)。用示例回調更新了答案。 –

+0

感謝您的示例。 –