2013-12-24 2 views
3

Если у меня есть модель meet в Rails, теперь я хочу получить вчера запись, как мне это сделать?Как получить вчера данные из Rails ActiveRecord

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

Или ActiveRecord имеет некоторый способ фильтрации вчерашнего отчета?

+0

Какой тип данных ': created_at'? Включает ли это время? –

+0

': created_at' создается самой Rails через метку переноса' t.timestamps'. Тип этого файла - datetime – HXH

+0

Вы хотите, чтобы все записи, созданные вчера, или все записи, которые существовали по состоянию на вчерашний день (и если да, то начало или конец вчерашнего дня)? –

ответ

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

Прохладный трюк. Никогда не видел этот синтаксис, отлично работает для того, что мне нужно. –

+0

Я храню данные в формате времени UTC (например: «2017-03-20 00:58:19») и использовал метод «DATE» для решения этой проблемы. Однако имейте в виду, что 'DATE' не конвертирует часовые пояса. – Matt

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

спасибо, это вернет все записи до сегодняшнего дня, а не только вчера. – HXH

+0

ах мой плохой. Я вижу, у тебя есть ответ. редактирование шахты в любом случае. Благодарю. –

+1

Теперь этот код вернет записи, созданные ровно в полночь 00:00 вчера. 'Meet.where (" created_at =? ", DateTime.yesterday)' –

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

рельсами http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-where

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

или PostgreSQL

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

спасибо, это вернет все записи до сегодняшнего дня, а не только вчера – HXH

+0

Итак, вы можете использовать только «=» для вчерашних записей. 'Meet.where (created_at: Date.yesterday)' или 'Meet.where (" created_at = 'вчера') ' – itsnikolay

+0

Нет, это не сработает, если моя дата« 2013-12-23 05: 12: 00 » '=' ничего не вернет, мы сначала должны изменить 'datetime'to' date' ('2013-12-23'), тогда это сработает, спасибо! – HXH

0

Вот несколько более общий подход, с использованием Arel и областей:

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

Meet.created_since(1.day.ago).count 
Смежные вопросы