Tengo una tabla donde se agregan nuevos registros diariamente. ¿Cómo voy a buscar los registros creados en el mes anterior?¿Cómo encontrar un registro creado el mes anterior?
Respuesta
configurar un ámbito llamado:
named_scope :in_last_month, :conditions => [ "records.created_at > ?", 1.month.ago ]
llamarlo (en su controlador):
Record.in_last_month
¿Tiene los campos "habituales" en su tabla? Vea el RoR wiki para obtener una lista de ellos. De esta manera, puede expresar consultas especiales para encontrar una respuesta.
Suponiendo que sus registros son sellos de tiempo, sólo se puede hacer algo como esto:
Thing.find(:all, :conditions => ["created_at > ?", Time.now - 1.month])
Si no están indicación de la hora, usted debe comenzar a almacenar la información, ya que es algo que tendrá que buscar más tarde.
Alternativamente, usted puede hacer 1.month.ago que es lo mismo que Time.now - 1.month. –
Thing.find(:all, :conditions => ["created_at > ?", 1.month.ago.at_beginning_of_month])
Gracias a todos, terminamos yendo con esto:
find(:all, :conditions => ['created_at > ? AND created_at < ?', Date.today.last_month.beginning_of_month, Date.today.beginning_of_month])
El named_scope
es una rata Creo que es su manera elegante de ir, pero si toma esa ruta, querrá usarla con un método lambda
para que no se alcance el tiempo cuando la aplicación se carga inicialmente.
Por ejemplo, esto:
named_scope :last_month, :conditions =>
['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]
funcionará correctamente el primer mes de su aplicación se ha terminado, pero inadecuadamente el próximo mes, a menos que la aplicación se reinicia.
Pero esto:
named_scope :last_month, lambda {
{:conditions => ['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]}}
funcionará cada vez, ya que el método lambda es ejecutado en cada llamada, reevaluar los Date.today
s.
No tengo suficiente reputación para votar aún, pero tenga en cuenta el comentario que menciona el uso de lambdas en named_scopes. Hay un episodio Railscasts sobre el tema que debe ser útil, así:
este es un buen candidato para de SQL ENTRE sintaxis
named_scope :last_month, :conditions => ['created_at BETWEEN ? AND ?', Date.today.last_month.beginning_of_month, Date.today.beginning_of_month])
En uno de mis proyectos i utilizado este manera:
Thing.where('created_at BETWEEN ? AND ? ', DateTime.now.beginning_of_month - 1.month, DateTime.now.beginning_of_month)
en Rails 3 utilizando last_month arroja un error: Date.today.last_month.beginning_of_month
NoMethodError: undefined method `last_month'
La respuesta aceptada y la mejora de lambda no funcionan en Rails 4.
Actualización para Rieles 4:
scope :last_month, -> {
where('created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month,
Date.today.beginning_of_month)}
- 1. ¿Cómo obtener el mes anterior y el siguiente?
- 2. Cómo mostrar dinámicamente el nombre del mes anterior
- 3. Cómo encontrar el primer día del próximo mes, si el mes actual es diciembre
- 4. MySQL Siguiente/Registro anterior
- 5. Cómo encontrar el compromiso de fusión anterior
- 6. Cómo encontrar el control activo anterior: Delphi
- 7. primer día del mes anterior en javascript
- 8. primera y última fecha del mes anterior
- 9. ¿Cómo funciona slf4j? Ningún registro creado conseguir
- 10. Obtener el último día del mes anterior en Oracle Función
- 11. registro a registro anterior en PostgreSQL
- 12. Cálculo de diferencia con el registro anterior
- 13. ¿Cómo encontrar el registro anterior y siguiente con una sola consulta en MySQL?
- 14. Datepicker fechas del mes anterior seleccionables
- 15. ¿Archivo de registro no creado?
- 16. Rieles: registro anterior y siguiente de la consulta anterior
- 17. Cómo encontrar la semana del mes
- 18. Seleccione el primer día del mes anterior en (DB2) SQL
- 19. ¿Cómo encontrar el registro coincidente en mongodb?
- 20. ¿Cómo encontrar un mes después de una fecha con django?
- 21. ¿Cómo encontrar el número de días del mes en curso
- 22. ¿Cómo encontrar el número de fila de un registro?
- 23. ¿Cómo insertar un registro y devolver el ID recién creado con un solo SqlCommand?
- 24. Android: ¿cómo anular el registro de un receptor creado en el manifiesto?
- 25. Registro de un objeto COM creado con VS C# 2010
- 26. Validación ignorado cuando se clona un registro recién creado
- 27. Seleccione el número de días que un registro está presente dentro de un determinado año/mes
- 28. Dado un tiempo, ¿cómo puedo encontrar el tiempo hace un mes
- 29. Obtener el último registro de cada mes en MySQL ...?
- 30. Encontrar el registro MX usando C#?
Es posible que desee agregar que necesita agregar una columna created_at; de lo contrario, Rails no se auto-poblará por usted. – Otto
El created_at debe incluirse en una migración predeterminada que agrega "timestamps" automáticamente. También tenga en cuenta que lo que mostré aquí para el named_scope debe estar encerrado en una lambda como alguien muy bien anotado a continuación ... –
Esta respuesta no funciona en Rails 4. Consulte la respuesta a continuación para el uso de Rails 4: http://stackoverflow.com/ a/29904961/336920 –