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

时间:2015-05-31 06:36:51

标签: ruby-on-rails datetime mongoid

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

但它不起作用......

我不想维护更多字段,每当其中一个字段更新时,这些字段将使用最新字段进行更新...

有什么想法吗?

1 个答案:

答案 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