Comment obtenir l’enregistrement créé aujourd’hui par rails activerecord?

Comment devrais-je écrire la déclaration conditionnelle pour quand je veux obtenir tous les enregistrements qui ont été créés aujourd’hui?

Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) 

PS: Cette réponse a été modifiée car la réponse de Harish Shetty était meilleure que la mienne. Comme ma réponse est acceptée une. J’ai mis à jour cette réponse pour le soutien de la communauté

Je sais que cette question a une réponse acceptée. La solution proposée dans la réponse acceptée peut entraîner des problèmes de performances lorsque la taille de la table augmente.

En règle générale, si vous effectuez des recherches en fonction de la colonne created_at , ajoutez un index sur la table dans votre fichier de migration.

 add_index :posts, :created_at 

Maintenant, pour rechercher des enregistrements créés aujourd’hui:

Rails 3/4

 Post.where("created_at >= ?", Time.zone.now.beginning_of_day) 

Pour rechercher des publications créées un jour spécifique.

 Post.where(:created_at => (date.beginning_of_day..date.end_of_day)) 

——— OU ————-

Ajouter une méthode statique à votre modèle

 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]) 

——— OU ————-

Ajouter un named_scope à votre modèle

 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 

La réponse de Mohit Jain adaptée pour Rails3

 Model.where "DATE(created_at) = DATE(?)", Time.now 

model.rb

 scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) } 

posts_controller.rb

 Post.posted_today 

Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)

Ce “namescopes” l’atsortingbut avec le table_name .

Pour une raison quelconque, aucune des autres solutions de cet article ni d’autres sur StackOverflow n’a fonctionné pour moi (en utilisant Rails 4.2.4 et Ruby 2.2.3p173). Ceci est la seule requête que je pourrais obtenir avec ma firebase database Postgres:

 Post.where("created_at >= TIMESTAMP 'now'") 

Pour interroger des enregistrements créés à partir d’aujourd’hui

Utilisez scope avec arel

 class Post < ActiveRecord::Base scope :create_from_today, -> { where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day)) } end 

Utiliser la scope avec une requête brute

 class Post < ActiveRecord::Base scope :create_from_today, -> { where('created_at >= now()') } end 

Alors on peut l’utiliser

 today_posts = Post.created_from_today 

Dans rails 4.2.3 pour obtenir les enregistrements créés aujourd’hui, utilisez mysql comme suit:

@usergoals = Goal.where (“userid =: userid et Date (created_at) =: date”, {userid: params [: id], date: Date.today})

ici, j’utilise plusieurs conditions si vous voulez, vous pouvez l’éditer pour une seule condition.