128 votes

comment obtenir l'enregistrement créé aujourd'hui par rails activerecord ?

Comment écrire l'instruction :condition si je veux obtenir tous les enregistrements créés aujourd'hui ?

255voto

Mohit Jain Points 9959
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)

131voto

Harish Shetty Points 38877

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 général, si vous effectuez des recherches basées sur les éléments suivants created_at ajoutez un index sur la table dans votre fichier de migration.

add_index :posts, :created_at

Maintenant, pour rechercher les enregistrements créés aujourd'hui :

Rails 3/4

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

Pour consulter les messages créés un jour donné.

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

--------- OU -------------

Ajoutez 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

31voto

jigfox Points 11788

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

20voto

thekindofme Points 2789

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

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

5voto

Parthiv Points 105

Model.rb

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

posts_controller.rb

Post.posted_today

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X