2

のスコープを作成しようとしていますinvoice。エイジングビューでの使用です。

請求日はinvoice.invdateです。

これは機能しませんでした-DateTimeテーブルだと思います:

 scope :thirtydays, where("DateTime.now - DATE(invdate) < ?", 31)

これはpgエラーです:

missing FROM-clause entry for table "datetime"
4

1 に答える 1

1

問題は、文字列補間を使用する代わりに、where 句内で Ruby コードを文字列として渡すことです。

何をしようとしているのかはわかりますが、Rails に日付検索を処理させるべきだと思います。

次の方法でコードを簡素化できます。

class Invoice < ActiveRecord::Base
  def self.thirtydays
    where(invdate: 31.days.ago..DateTime.now)
  end
end

31.days.ago..DateTime.now31 日前の日付で始まり、今日の日付で終わる Range オブジェクトを生成します。データベース プラットフォーム (この場合は Postgresql) に応じて、Rails が SQL 日付範囲呼び出しを処理します。

次のような SQL ステートメントが生成されます。

SELECT `invoices`.* FROM `invoices`  WHERE (`invoices`.`invdate` BETWEEN '2013-09-24 22:00:00' AND '2013-10-25 22:00:00')
于 2013-10-25T21:18:40.313 に答える