J'ai besoin d'interroger les commentaires faits en un jour. Le champ fait partie des horodatages standard, estcreated_at
. La date sélectionnée provient d'un date_select
.
Comment puis-je utiliser ActiveRecord
pour faire ça?
J'ai besoin de quelque chose comme:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
je ne sais pas ce que vous entendez par `` utiliser la plage seule ''scope :between, -> (a, b) { where(created_at: a..b) }
Je créerais personnellement une portée pour la rendre plus lisible et réutilisable:
Dans votre Comment.rb, vous pouvez définir une portée:
Puis interroger créé entre:
J'espère que ça aide.
la source
#between?
accepté une plage.Rails 5.1 a introduit une nouvelle méthode d'assistance de date
all_day
, voir: https://github.com/rails/rails/pull/24930Si vous utilisez Rails 5.1, la requête ressemblerait à ceci:
la source
require 'active_record'
et vous êtes prêt!Ce code devrait fonctionner pour vous:
Pour plus d'informations, consultez les calculs de temps
Remarque: ce code est obsolète . Utilisez le code de la réponse si vous utilisez Rails 3.1 / 3.2
la source
date()
fonction au niveau de la base de données ; il est potentiellement plus indépendant de la base de données.J'ai exécuté ce code pour voir si la réponse vérifiée fonctionnait et j'ai dû essayer d'échanger les dates pour bien faire les choses. Cela a fonctionné -
Si vous pensez que la sortie aurait dû être de 36, considérez ceci, Monsieur, combien de jours est de 3 jours pour 3 personnes?
la source
la source
J'ai utilisé les 3 points, au lieu de 2. Trois points vous donnent une plage qui est ouverte au début et fermée à la fin, donc si vous faites 2 requêtes pour les plages suivantes, vous ne pouvez pas récupérer la même ligne tous les deux.
Et, oui, toujours agréable d'utiliser une lunette!
la source
Si vous ne voulez obtenir qu'un jour, ce serait plus facile de cette façon:
la source
il y a plusieurs manières. Vous pouvez utiliser cette méthode:
Ou ca:
la source
Il devrait y avoir un comportement d'enregistrement actif par défaut à ce sujet, je pense. L'interrogation des dates est difficile, en particulier lorsque des fuseaux horaires sont impliqués.
Quoi qu'il en soit, j'utilise:
la source
Vous pouvez utiliser la gemme ci-dessous pour trouver les enregistrements entre les dates,
Ce bijou assez simple d'utilisation et plus clair Par star j'utilise ce bijou et l'API plus clair et la documentation également bien expliquée.
Ici, vous pouvez également passer notre champ
Post.by_month("January", field: :updated_at)
Veuillez consulter la documentation et l'essayer.
la source