Намерих отговора сам. С префикс 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 работи различно. Така че трябваше да се отърва от последните три числа и да ги закръгля. Ако някой знае по-елегантен начин, моля да ме уведоми.
Единственият ми останал проблем е, че не мога да съхраня Date
обект на MongoDB. Винаги ми казва, че трябва да използвам Time
. Мисля, че е по-добре да надстроя mongoid до 3.0.1.