我有type: Time
的3个字段。
field :last_updated, type: Time
field :last_event, type: Time
field :last_status, type: Time
如何进行查询 - 这将为我提供所有这些字段不到30分钟前的所有记录?
我不想写下面的查询 -
Model.where(:last_status.lt => 30.minutes.ago,:last_event.lt => 30.minutes.ago,:last_updated.lt => 30.minutes.ago).all
我想做点什么:
def updated_date
timestamps = [self.last_status,self.last_event,self.last_updated]
timestamps.reject(&:nil?).max
end
Model.where(updated_date.lt => 30.minutes.ago).all
但它不起作用......
我不想维护更多字段,每当其中一个字段更新时,这些字段将使用最新字段进行更新...
有什么想法吗?
答案 0 :(得分:1)
嗯,这是工作代码:
def updated_date
timestamps = [ :last_status, :last_event, :last_updated ]
timestamps.reject { |sym| self.public_send(sym).nil? }
.max { |sym| self.public_send(sym) }
end
Model.where(:updated_date.lt => 30.minutes.ago).all
Anoter编写updated_date
方法的方法,该方法将保存双方法调用。
def updated_date
timestamps = {
last_status: self.last_status,
last_event: self.last_event,
last_updated: self.last_updated
}
timestamps.reject { |_, v| v.nil? }.max_by(&:last).first
end
Model.where(:updated_date.lt => 30.minutes.ago).all