Rails - 其中:created_at 小于(大于)self.created_at (Mongoid)

Rails - Where :created_at less (older) than self.created_at (Mongoid)

(我看过所有相关问题,但 none 对我有用)

before_update上,我需要获取self之前的最后一条记录,但不知道如何查询“created_at < self.created_at”。我正在尝试这个:

def set_update_consumo
    lastRecord = 
       Reporte.where(:hidrometro_id => self.hidrometro_id)
      .where('created_at < ?', self.created_at)
      .order_by(:created_at => 'desc').offset(1).first

    set_record(lastRecord)
end

我得到这个错误:

Completed 500 Internal Server Error in 784ms

ArgumentError (wrong number of arguments (given 2, expected 1)):

app/models/reporte.rb:49:in 'set_update_consumo'

app/controllers/reportes_controller.rb:57:in `block in update'

app/controllers/reportes_controller.rb:56:in `update'

如果我删除 where('created_at < ?', self.created_at) 就可以了。 None SO 中的其他答案对我有用,并且不能使用宝石(如 squeel)。

我正在使用 Rails 5.0.2 (Ruby 2.4) 和 Mongoid.

在 Mongoid 中,where 语法与 ActiveRecord 有点不同,实际上只接受一个参数——哈希。对于 "less-than" 表达式,您需要在属性符号上使用 .lt 方法:

where(:created_at.lt => self.created_at)

有关详细信息,请参阅 docs

此外,您可能不必在此处使用 self,简单的 created_at 应该会给出相同的结果。