How to get record created today by rails activerecord?
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
PS: This answer has been modified as answer by Harish Shetty was better than mine. As my answer is accepted one. I have updated this answer for community support
I know this question has an accepted answer. The solution suggested in the accepted answer can cause performance issues when the table size grows.
Typically, if you perform lookups based on created_at
column, add an index on the table in your migration file.
add_index :posts, :created_at
Now, to lookup records created today:
Rails 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
To lookup posts created on a specific day.
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
--------- OR -------------
Add a static method to your model
class Post < ActiveRecord::Base
def self.today
where("created_at >= ?", Time.zone.now.beginning_of_day)
end
end
Post.today #returns posts today
Rails 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
--------- OR -------------
Add a named_scope to your model
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 3
PostgreSQL:
Model.all :condition => ["created_at::date = ?", Date.today] # rails 2
Model.where("created_at::date = ?", Date.today) # rails 3