Как я могу найти записи с сегодняшнего дня, вчера и так далее с Ruby on Rails? - PullRequest
4 голосов
/ 26 августа 2010

Я хочу найти все записи, скажем, Posts, созданные сегодня с помощью Ruby on Rails, затем все записи, созданные вчера, и так далее ... как мне поступить?

Спасибо,

Kevin

Ответы [ 2 ]

16 голосов
/ 26 августа 2010

Попробуйте это:

#Today
Posts.find(:all, conditions: { :created_at => Date.today...Date.today + 1 })
#Yesterday
Posts.find(:all, conditions: { :created_at => Date.today - 1...Date.today })

Или вот это (желательно, на мой взгляд):

#Today
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today] )
#Yesterday
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today - 1] )
1 голос
/ 24 ноября 2013

Как правило, я храню все даты на своем сервере в часовом поясе UTC и позволяю интерфейсу пользователя обрабатывать любые преобразования часовых поясов. Чтобы получить тот запрос, который вы хотите получить после корректной работы, мне пришлось втиснуть входящую дату в Первый диапазон времени по UTC.

require 'date'

class Post < ActiveRecord::Base

  def self.created(a_date)
    return Post.where(created_at: to_timerange(a_date))
  end

  private

  def self.to_timerange(a_date)
    raise ArgumentError, "expected 'a_date' to be a Date" unless a_date.is_a? Date
    dts = Time.new(a_date.year, a_date.month, a_date.day, 0, 0, 0).utc
    dte = dts + (24 * 60 * 60) - 1
    return (dts...dte)
  end

end

Это тогда позволяет вам звонить

# today
posts = Post.created(Date.today)
# yesterday
posts = Post.created(Date.today - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...