9 ответов:
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)PS: этот ответ был изменен, поскольку ответ Хариша Шетти был лучше моего. В качестве моего ответа принимается один. Я обновил этот ответ для поддержки сообщества
Я знаю, что этот вопрос принято отвечать. Решение, предложенное в принятом ответе, может вызвать проблемы с производительностью при увеличении размера таблицы.
как правило, если вы выполняете поиск на основе
created_atстолбец, добавьте индекс в таблицу в файле миграции.add_index :posts, :created_atтеперь, для поиска записей, созданных сегодня:
рельсы 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)для поиска сообщений, созданных на определенном день.
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))--------- или -------------
добавить статический метод в модели
class Post < ActiveRecord::Base def self.today where("created_at >= ?", Time.zone.now.beginning_of_day) end end Post.today #returns posts todayрельсы 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])--------- или -------------
добавьте named_scope в вашу модель
class Post < ActiveRecord::Base named_scope :today, lambda { { :conditions => ["created_at >= ?", Time.zone.now.beginning_of_day] } } end Post.today #returns posts today
MySQL:
Model.all :condition => ["DATE(created_at) = ?", Date.today] # rails 2 Model.where("DATE(created_at) = ?", Date.today) # rails 3PostgreSQL:
Model.all :condition => ["created_at::date = ?", Date.today] # rails 2 Model.where("created_at::date = ?", Date.today) # rails 3
модель.РБ
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }posts_controller.РБ
Post.posted_today
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)этот "областей видимости имен" атрибут с
table_name.
по какой-то причине ни одно из других решений в этом посте, ни другие на StackOverflow не работали для меня (используя Rails 4.2.4 и Ruby 2.2.3p173). Это единственный запрос, который я мог бы получить для работы с моей базой данных Postgres:
Post.where("created_at >= TIMESTAMP 'now'")
для запроса записей, которые созданы с сегодняшнего дня
используйте область с arel
class Post < ActiveRecord::Base scope :create_from_today, -> { where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day)) } endиспользовать область с необработанным запросом
class Post < ActiveRecord::Base scope :create_from_today, -> { where('created_at >= now()') } endзатем мы можем использовать
today_posts = Post.created_from_today
в rails 4.2.3 для получения записей, созданных сегодня, с помощью mysql используйте следующее.
@usergoals = цель.где("имяпользователя = :userId и дата(created_at) = :дата", { ID пользователя: параметр params[:ИД], дата: дата.сегодня })
здесь я использую несколько условий, если вы хотите, вы можете редактировать его для единственное условие.
Comments