¿Cómo debo escribir la declaración condicional para cuando quiero obtener todos los registros que se crearon hoy?
ruby-on-rails
date
rails-activerecord
Victor Lam
fuente
fuente
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
es muy inteligente, lo respaldaríaPost.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
. Hay un punto para hacerlo de una manera que pueda manipular el tiempo. Por ejemplo, si está probando, probablemente manipulará el tiempo y luego la primera opción no funcionará. Desea evitar ese tipo de posible falla futura que probablemente llevará algún tiempo de depuración.Sé que esta pregunta tiene una respuesta aceptada. La solución sugerida en la respuesta aceptada puede causar problemas de rendimiento cuando aumenta el tamaño de la tabla.
Normalmente, si realiza búsquedas basadas en
created_at
columnas, agregue un índice en la tabla en su archivo de migración.Ahora, para buscar registros creados hoy:
Carriles 3/4
Para buscar publicaciones creadas en un día específico.
--------- O -------------
Agrega un método estático a tu modelo
Carriles 2
--------- O -------------
Agrega un named_scope a tu modelo
fuente
scope
ejemplo de esta publicación es solo para Rails 3, ya que parece que está debajo del encabezado Rails 2. En Rails 2, necesitaría usar ennamed_scope
lugar descope
. Además, en Rails 3, podría usar de manera equivalente un método de clasedef self.today where("created_at >= ?", Time.now.beginning_of_day) end
que probablemente sea más limpio que usar un alcance en este caso, ya que le permite renunciar a la lambda.MySQL:
PostgreSQL:
fuente
La respuesta de Mohit Jain adaptada para Rails3
fuente
Rails 5.1 tiene un
all_day
ayudante que es útil aquí.o
fuente
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Esto "asigna nombres" al atributo con el
table_name
.fuente
model.rb
posts_controller.rb
fuente
between_period
parece interesante. No encontré ninguna documentación para ello. ¿Puede proporcionar algún enlace? ¿Cómo eligen los rieles la columna para comparar?Por alguna razón, ninguna de las otras soluciones en esta publicación ni otras en StackOverflow funcionó para mí (usando Rails 4.2.4 y Ruby 2.2.3p173). Esta es la única consulta que pude hacer para trabajar con mi base de datos de Postgres:
fuente
Para consultar registros creados a partir de hoy
Usar alcance con arel
Entonces podemos usarlo
fuente
where('created_at >= now()')
solo encontraría elementos donde created_at estuviera en el futuro..lteq(Time.zone.now.end_of_day))
también.En rails 4.2.3 para obtener los registros creados hoy, usando mysql use lo siguiente.
@usergoals = Goal.where ("userid =: userid y Date (created_at) =: date", {userid: params [: id], date: Date.today})
aquí estoy usando múltiples condiciones si lo desea, puede editarlo para una sola condición.
fuente