rails now month active ruby-on-rails date rails-activerecord

ruby-on-rails - now - rails timestamp to date



¿Cómo obtener un registro creado hoy por rails activerecord? (9)

¿Cómo debería escribir la declaración condicional para cuando quiero obtener todos los registros que se crearon hoy?


En los rieles 4.2.3 para obtener los registros creados hoy, usando mysql use lo siguiente.

@usergoals = Goal.where ("userid =: ID de usuario y Fecha (created_at) =: date", {userid: params [: id], date: Date.today})

aquí estoy usando múltiples condiciones si quieres puedes editarlo por una sola condición.


La respuesta de Mohit Jain adaptada para Rails3

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


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


Para consultar registros que se crearon a partir de hoy

Usar alcance con arel

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

Usar alcance con consulta sin formato

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

Entonces podemos usarlo

today_posts = Post.created_from_today


Por alguna razón, ninguna de las otras soluciones en este post ni otras en funcionó para mí (usando Rails 4.2.4 y Ruby 2.2.3p173). Esta es la única consulta que pude obtener para trabajar con mi base de datos de Postgres:

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


Sé que esta pregunta tiene una respuesta aceptada. La solución sugerida en la respuesta aceptada puede causar problemas de rendimiento cuando crece el tamaño de la tabla.

Normalmente, si realiza búsquedas basadas en la columna created_at , agregue un índice en la tabla en su archivo de migración.

add_index :posts, :created_at

Ahora, para buscar registros creados hoy:

Rieles 3/4

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

Para buscar publicaciones creadas en un día específico.

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

--------- O -------------

Agregue un método estático a su modelo

class Post < ActiveRecord::Base def self.today where("created_at >= ?", Time.zone.now.beginning_of_day) end end Post.today #returns posts today

Carriles 2

Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])

--------- O -------------

Agregue un named_scope a su modelo

class Post < ActiveRecord::Base named_scope :today, lambda { { :conditions => ["created_at >= ?", Time.zone.now.beginning_of_day] } } end Post.today #returns posts today


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)

Este "namescopes" el atributo con table_name .


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

PD: Esta respuesta ha sido modificada porque Harish Shetty respondió que era mejor que la mía. Como mi respuesta es aceptada. He actualizado esta respuesta para el apoyo de la comunidad