5 votes

Rails activerecord : recherche d'un enregistrement par un champ de date ?

J'essaie de rechercher des enregistrements dans le fichier TimeSlot par le champ start_date qui a le type datetime . Voici ce que j'ai essayé jusqu'à présent et qui a échoué :

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1))

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1).to_s)

TimeSlot.where(:start_date => "2010-09-08")

TimeSlot.where(:start_date => "2010-09-08 00:00:00")

J'apprécierais toute aide.

1voto

Larry K Points 16266

Vos requêtes me semblent bonnes.

Êtes-vous sûr d'avoir une ligne correspondante dans la base de données ?

Pour déboguer, regardez dans votre fichier logs/development.log.

Ajouté :

Le problème pourrait être les fuseaux horaires. Votre requête utilise le fuseau horaire de votre serveur. Vos données peuvent être stockées dans un autre fuseau horaire.

0voto

Je parie que c'est aussi une question de fuseau horaire. Tout dans la base de données est automatiquement converti en UTC par les rails. Les requêtes 1 et 4 devraient fonctionner s'il n'y a pas de décalage.

0voto

etlds Points 1236

Réponse de rubyonrails.org

Client.where("created_at >= :start_date AND created_at <= :end_date", {:start_date => params[:start_date], :end_date => params[:end_date]})

ou

Client.where("created_at IN ( ?)", (params[:start_date].to_date)..(params[:end_date].to_date))

Voici ce que j'ai pour demander que tous les TimeSlot commencent à "2010-09-08", si votre start_date est un champ de date.

TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-08")

Si votre start_date est un champ de type date.

TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-09")

Parce que la date commence à 00:00:00

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X