我有3个字段与type: Time
。
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
但是它不工作…
我不想维护更多的字段,每次这些字段中的一个更新时都会更新最新的字段…
任何想法?
下面是工作代码:
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
另一种编写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