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
应该会给出相同的结果。
(我看过所有相关问题,但 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
应该会给出相同的结果。