自分で答えを見つけました。プレフィックスthis.*
フィールドを参照できます。そして、JavaScript関数を使用できます。 MongoDBはどんどん涼しくなります!
これが私の解決策です:
class Invoice
include Mongoid::Document
field :invoice_date, :type => Date
field :days_for_payment, :type => Integer
...
scope :overdue, where("(Math.round(this.invoice_date.getTime() / 1000) + (this.days_for_payment * 24 * 3600)) < #{Time.now.to_i}")
...
end
jsでのタイムスタンプの作成は異なります。そのため、最後の3つの数字を削除して丸める必要がありました。もっとエレガントな方法を知っている人がいたら、教えてください。
残っている唯一の問題は、Date
を保存できないことです。 MongoDBへのオブジェクト。 Time
を使用する必要があることを常に教えてくれます 。 mongoidを3.0.1にアップグレードしたほうがいいと思います。