Depuis "created_at" colonne contient la date et l'heure, mais vous avez besoin de comparer seule date, vous avez deux moyens (je suppose que vous utilisez MySQL) :
utilisation ENTRE:
scope :today, lambda { WHERE("created_at BETWEEN '#{DateTime.now.beginning_of_day}' AND '#{DateTime.now.end_of_day}'") }
Comment puis-je dire à rails (râteau) pour créer une date seulement de champ? Vous avez juste besoin d'ajouter "created_on" et "update_on" du champ à la table. Ces noms de colonnes sont spéciaux, de sorte que les valeurs seront automatiquement définies par les Rails. Finale de la portée: portée :aujourd'hui, lambda { où("created_on = ?", Date.aujourd'hui) }
>>MyModel.today #-> records created today>>MyModel.created_on(Date.today -1.week)#-> records created a week ago
Techniquement, devrait probablement être created_at >= ? AND created_at <= ?, sinon, vous avez deux secondes manquantes! Aussi, dans self.today, vous avez besoin self.created_**on**, plutôt que de created_**at**. Je fixe " >' et '<' " >=' et '<= -, nous ne le voulez pas manquer une seconde 😉 Et bien sûr, il doit être created_on pas created_at - merci pour le commentaire et les corrections!
Rails évalue la portée au niveau de la classe, donc quand vous utilisez :conditions => { :created_at => Date de.aujourd'hui } il évalue Date.aujourd'hui, et de comparer tous les dossiers de pré évalué date. Pour éviter cela, utilisez lamda pour définir la date ou l'heure des étendues spécifiques
syntax error, unexpected tASSOC, expecting '}' ...aujourd'hui, lambda { :conditions => { :created_at => Date de.aujourd'hui }... édité extrait de code .. l'essayer A obtenu le point: "created_at" colonne contient la date et l'heure, mais j'ai besoin de besoin que de comparer la date (jour, sans temps)
Depuis "created_at" colonne contient la date et l'heure, mais vous avez besoin de comparer seule date, vous avez deux moyens (je suppose que vous utilisez MySQL) :
scope :today, lambda { WHERE("created_at BETWEEN '#{DateTime.now.beginning_of_day}' AND '#{DateTime.now.end_of_day}'") }
scope :today, lambda { WHERE('DATE(created_at) = ?', Date.today)}
aussi, vous pouvez ajouter "created_on" colonne de la table avec la date.
Mise à jour:
scope :today, lambda { where(created_on: Date.today) }
Vous avez juste besoin d'ajouter "created_on" et "update_on" du champ à la table. Ces noms de colonnes sont spéciaux, de sorte que les valeurs seront automatiquement définies par les Rails.
Finale de la portée: portée :aujourd'hui, lambda { où("created_on = ?", Date.aujourd'hui) }
OriginalL'auteur BitOfUniverse
Je pense que vous pouvez définir une portée générale, comme ceci:
De sorte que vous pouvez utiliser
created_at >= ? AND created_at <= ?
, sinon, vous avez deux secondes manquantes! Aussi, dansself.today
, vous avez besoinself.created_**on**
, plutôt que decreated_**at**
.Je fixe " >' et '<' " >=' et '<= -, nous ne le voulez pas manquer une seconde 😉 Et bien sûr, il doit être created_on pas created_at - merci pour le commentaire et les corrections!
OriginalL'auteur santuxus
Rails évalue la portée au niveau de la classe, donc quand vous utilisez :conditions => { :created_at => Date de.aujourd'hui } il évalue Date.aujourd'hui, et de comparer tous les dossiers de pré évalué date. Pour éviter cela, utilisez lamda pour définir la date ou l'heure des étendues spécifiques
édité extrait de code .. l'essayer
A obtenu le point: "created_at" colonne contient la date et l'heure, mais j'ai besoin de besoin que de comparer la date (jour, sans temps)
OriginalL'auteur Naren Sisodiya
IMO c'est le plus compréhensible pour le faire.
OriginalL'auteur Venkat D.
Je sais que c'est une vieille question, mais ne peut toujours aider quelqu'un.
C'était ma façon à résoudre ce problème:
scope :today, -> { where(created_at: DateTime.now.beginning_of_day..DateTime.now.end_of_day) }
OriginalL'auteur Marcelo Barreto