J'ai une table où de nouveaux enregistrements sont ajoutés quotidiennement. Comment pourrais-je trouver des documents créés le mois précédent?Comment trouver un enregistrement créé le mois précédent?
Répondre
Mettre en place un champ nommé:
named_scope :in_last_month, :conditions => [ "records.created_at > ?", 1.month.ago ]
Pour l'appeler (dans votre contrôleur):
Record.in_last_month
Avez-vous les champs "habituels" sur votre table? Voir le RoR wiki pour une liste d'entre eux. De cette façon, vous pouvez exprimer des requêtes spéciales pour trouver une réponse.
En supposant que vos dossiers sont horodatées, vous pouvez simplement faire quelque chose comme ceci:
Thing.find(:all, :conditions => ["created_at > ?", Time.now - 1.month])
Si elles ne sont pas horodatées, vous devriez commencer à stocker les informations car il est quelque chose que vous aurez envie de regarder plus tard.
Sinon, vous pouvez faire 1.month.ago qui est la même chose que Time.now - 1.month. –
Thing.find(:all, :conditions => ["created_at > ?", 1.month.ago.at_beginning_of_month])
Merci tout le monde, je fini par aller avec ceci:
find(:all, :conditions => ['created_at > ? AND created_at < ?', Date.today.last_month.beginning_of_month, Date.today.beginning_of_month])
Le named_scope
est un rat Je pense que c'est une façon élégante d'y aller, mais si vous prenez cette route, vous voudrez l'utiliser avec une méthode lambda
afin que le temps ne soit pas compris lorsque l'application est initialement chargée.
Par exemple, ceci:
named_scope :last_month, :conditions =>
['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]
fonctionnera correctement le premier mois de votre demande est, mais de manière incorrecte le mois prochain, à moins que l'application se redémarrée.
Mais ceci:
named_scope :last_month, lambda {
{:conditions => ['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]}}
fonctionnera chaque fois, parce que la méthode lambda est exécuté à chaque appel, les réévaluant Date.today
s.
Je n'ai pas assez de réputation pour voter encore, mais veuillez prendre note du commentaire qui mentionne l'utilisation de lambdas dans named_scopes. Il y a un épisode Railscasts sur le sujet qui devrait être utile aussi bien:
c'est un bon candidat pour SQL ENTRE syntaxe
named_scope :last_month, :conditions => ['created_at BETWEEN ? AND ?', Date.today.last_month.beginning_of_month, Date.today.beginning_of_month])
Dans l'un de mes projets j'ai utilisé cette ainsi:
Thing.where('created_at BETWEEN ? AND ? ', DateTime.now.beginning_of_month - 1.month, DateTime.now.beginning_of_month)
dans Rails 3 en utilisant last_month renvoie une erreur: Date.today.last_month.beginning_of_month
NoMethodError: undefined method `last_month'
La réponse acceptée et l'amélioration lambda ne fonctionnent pas dans Rails 4.
Mise à jour pour Rails 4:
scope :last_month, -> {
where('created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month,
Date.today.beginning_of_month)}
- 1. Comment trouver le prochain mois d'août? C#
- 2. trouver l'élément précédent dans un tableau JQuery
- 3. Hibernate: comparer enregistrement en cours et précédent
- 4. Upcasting F # enregistrement créé par la réflexion
- 5. Trouver enregistrement suivant dans un ensemble: LINQ
- 6. Comment associer un élément de travail à un enregistrement précédent dans TFS
- 7. C# .Net Obtenir le dernier jour du mois précédent à partir de la date du jour
- 8. Comment créer une fonction permettant de déterminer les dates du dernier jour du mois précédent?
- 9. Récupère l'horodatage unix de minuit le mercredi précédent
- 10. Comment fonctionne le bouton Précédent dans un navigateur Web?
- 11. Requête SQL pour trouver un enregistrement unique trié
- 12. Le bouton Précédent n'est pas rendu
- 13. Googlemaps - supprimer le marqueur précédent
- 14. Le bouton Précédent IE6 et repost
- 15. Comment retourner un sélecteur personnalisé/créé dans le plugin jquery
- 16. Clearcase UCM: comment trouver des versions dans le flux A créé en fusionnant du flux B
- 17. Obtenir les dates du premier et du dernier jour du mois précédent en C#
- 18. Comment identifier le fichier créé complètement
- 19. Comment obtenir le nom du mois en C#?
- 20. comment aller à l'écran précédent
- 21. Le fichier .lib n'est pas créé (VS2008)
- 22. Comment valider un contrôle créé dynamiquement?
- 23. comment obtenir un deuxième enregistrement en linq à sql
- 24. Désactivation du bouton Précédent sur le navigateur
- 25. ajouter un UIView problème précédent tableView
- 26. comment trouver le premier enregistrement du groupe dans les rapports de cristal?
- 27. Comment obtenir le propriétaire précédent dans la table sql?
- 28. fonction pour déterminer premier jour d'un mois, le dernier jour d'un mois, etc.
- 29. Comment puis-je utiliser un SQL "IN" déclaration avec rails active Enregistrement et trouver .MAP
- 30. WPF Toolkit Calendar Control - comment empêcher le défilement du mois suivant?
Vous voudrez peut-être ajouter que vous devez ajouter une colonne created_at, sinon Rails ne le remplira pas automatiquement. – Otto
created_at doit être inclus dans une migration par défaut qui ajoute automatiquement des "horodatages". Notez également que ce que j'ai montré ici pour le named_scope devrait être inclus dans un lambda comme quelqu'un bien noté ci-dessous ... –
Cette réponse ne fonctionne pas dans Rails 4. Voir la réponse ci-dessous pour l'utilisation de Rails 4: http://stackoverflow.com/ a/29904961/336920 –