Necesito consultar los comentarios realizados en un día. El campo es parte de las marcas de tiempo estándar, es created_at
. La fecha seleccionada proviene de a date_select
.
¿Cómo puedo usar ActiveRecord
para hacer eso?
Necesito algo como:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
no estoy claro a qué te refieres con 'usar el rango por sí mismo'scope :between, -> (a, b) { where(created_at: a..b) }
Personalmente, creé un ámbito para hacerlo más legible y reutilizable:
En su Comment.rb, puede definir un alcance:
Luego para consultar creado entre:
Espero eso ayude.
fuente
#between?
aceptaba un rango.Rails 5.1 introdujo un nuevo método de ayuda de fecha
all_day
, consulte: https://github.com/rails/rails/pull/24930Si está utilizando Rails 5.1, la consulta se vería así:
fuente
require 'active_record'
y ya está todo listo!Este código debería funcionar para usted:
Para obtener más información, eche un vistazo a los cálculos de tiempo
Nota: este código está en desuso . Use el código de la respuesta si está usando Rails 3.1 / 3.2
fuente
date()
función de nivel db ; es potencialmente más independiente de db.Ejecuté este código para ver si la respuesta marcada funcionaba, y tuve que intentar cambiar las fechas para hacerlo bien. Esto funcionó
Si está pensando que el resultado debería haber sido 36, considere esto, señor, ¿cuántos días son 3 días para 3 personas?
fuente
fuente
He estado usando los 3 puntos, en lugar de 2. Tres puntos le dan un rango que está abierto al principio y cerrado al final, por lo que si hace 2 consultas para los rangos posteriores, no puede volver a obtener la misma fila ambos.
Y sí, ¡siempre es bueno usar un osciloscopio!
fuente
Si solo desea obtener un día, sería más fácil de esta manera:
fuente
Hay varias formas. Puedes usar este método:
O esto:
fuente
Creo que debería haber un comportamiento de registro activo predeterminado en esto. Consultar fechas es difícil, especialmente cuando hay zonas horarias involucradas.
De todos modos, yo uso:
fuente
Podrías usar la gema debajo para encontrar los registros entre fechas,
Esta gema es bastante fácil de usar y más clara Por estrellas estoy usando esta gema y la API más clara y la documentación también está bien explicada.
Aquí también puedes pasar nuestro campo
Post.by_month("January", field: :updated_at)
Por favor, consulte la documentación y pruébelo.
fuente