Rails mongoid查询具有相同值的多个字段



我有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

相关内容

  • 没有找到相关文章

最新更新