のスコープを作成しようとしていますinvoice
。エイジングビューでの使用です。
請求日はinvoice.invdate
です。
これは機能しませんでした-DateTime
テーブルだと思います:
scope :thirtydays, where("DateTime.now - DATE(invdate) < ?", 31)
これはpgエラーです:
missing FROM-clause entry for table "datetime"
のスコープを作成しようとしていますinvoice
。エイジングビューでの使用です。
請求日はinvoice.invdate
です。
これは機能しませんでした-DateTime
テーブルだと思います:
scope :thirtydays, where("DateTime.now - DATE(invdate) < ?", 31)
これはpgエラーです:
missing FROM-clause entry for table "datetime"
問題は、文字列補間を使用する代わりに、where 句内で Ruby コードを文字列として渡すことです。
何をしようとしているのかはわかりますが、Rails に日付検索を処理させるべきだと思います。
次の方法でコードを簡素化できます。
class Invoice < ActiveRecord::Base
def self.thirtydays
where(invdate: 31.days.ago..DateTime.now)
end
end
31.days.ago..DateTime.now
31 日前の日付で始まり、今日の日付で終わる 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')