如何从Rails ActiveRecord获取昨天的数据

时间:2013-12-24 05:47:56

标签: ruby-on-rails activerecord

如果我在Rails中有meet模型,现在我想获得昨天的记录,我该怎么办?

Meet.where(:created_at=> ) # what should I write here?

或者ActiveRecord附带了一些过滤昨天记录的方法吗?

6 个答案:

答案 0 :(得分:9)

Meet.where("DATE(created_at) = ?", Date.today-1)

答案 1 :(得分:1)

Meet.where("DATE(created_at) = ?", Date.yesterday)

答案 2 :(得分:1)

Meet.find(:all, :conditions => ["DATE(created_at) = ?", Date.today-1])

答案 3 :(得分:1)

通过Rails http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-where

Meet.where("created_at < ?", Date.yesterday)

或在postgresql中

Meet.where("created_at < 'yesterday'")

答案 4 :(得分:0)

这是一种稍微更通用的方法,使用Arel和范围:

  scope :created_since, (
    lambda do |time|
      where(Meet.arel_table[:created_at].gteq(time))
    end
  )

Meet.created_since(1.day.ago).count

答案 5 :(得分:0)

如果您使用的是 Rails 5.1 或更高版本,则可以使用 all_day:

Meet.where(created_at: 1.day.ago.all_day)

也..我建议定义一个范围,如:

scope :yesterday, -> { where(created_at: 1.day.ago.all_day) }