Encontré la respuesta yo mismo. Con el prefijo this.*
Puedo hacer referencia a los campos. Y puedo usar funciones de JavaScript. ¡MongoDB se vuelve más y más genial!
Así que aquí está mi solución:
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
La creación de marcas de tiempo en js funciona de manera diferente. Así que tuve que deshacerme de los últimos tres números y redondearlos. Si alguien conoce una forma más elegante, hágamelo saber.
El único problema que me queda es que no puedo almacenar una Date
objeto a MongoDB. Siempre me dice que tengo que usar Time
. Creo que mejor actualizo mongoid a 3.0.1.