0

私はうまく機能するメソッドを持っています(rails 3とPostgreSQLで); データベースに依存しないようにすることが可能かどうか疑問に思います:

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

私が理解しているように、日付から週のISO番号を抽出する方法は、常にデータベース固有です。

ここに示すように、仮想属性:weekのようなものを使用できますが、:groupオプションは生のSQLのみを受け入れるようです。私もこの解決策を見ましたが、それは私のニーズに合いません。もう1つの方法は、データベースビューを使用するか、コールバックメソッドで埋められた: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 に答える