Encontrei a resposta sozinho. Com o prefixo
this.*
Eu posso fazer referência aos campos. E eu posso usar funções JavaScript. MongoDB fica cada vez mais legal! Então aqui está minha solução:
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
A criação de timestamp em js funciona de forma diferente. Então eu tive que me livrar dos três últimos números e arredondar. Se alguém souber de uma forma mais elegante, por favor me avise.
Meu único problema é que não consigo armazenar uma
Date
objeto para MongoDB. Sempre me diz que tenho que usar Time
. Acho melhor atualizar o mongoid para 3.0.1.