2个日期的Rails方式范围为'或'

时间:2014-04-24 13:09:06

标签: ruby-on-rails activerecord ruby-on-rails-4

条件的正确方法是什么,如果我需要获取今天范围内的行,例如昨天? 我的意思是这样的:

Model.where("created_at ? OR created_at ?", 
             Time.now - 3.hours..Time.now + 3.hours, 
             Time.now - 1.day - 3.hours..Time.now - 1.day + 3.hours)

3 个答案:

答案 0 :(得分:2)

你可以这样做:

Model.where("(created_at between ? and ?) OR (created_at between ? and ?)",
         DateTime.now - 3.hours, DateTime.now + 3.hours,
         DateTime.now - 1.day - 3.hours, DateTime.now - 1.day + 3.hours)

如果你没有OR,你可以这样做:

Model.where(:created_at => (DateTime.now - 3.hours)..(DateTime.now + 3.hours))

但是既然你有OR,你只需要写出来"就像我上面展示的那样。

答案 1 :(得分:2)

Model.where("(created_at between ? and ?) OR (created_at between ? and ?)",
            3.hours.ago,
            3.hours.from_now,
            3.hours.ago.yesterday,
            3.hours.from_now.yesterday)

答案 2 :(得分:0)

使用或通过Arel进行查询

 model = Model.arel_table

 Model.where(model[:created_at].eq(DateTime.now - 3.hours..DateTime.now + 3.hours).or(model[:created_at].eq(DateTime.now - 1.day - 3.hours..DateTime.now - 1.day + 3.hours)))