2010-06-04 4 views
1

Je ne comprends pas, rien de plus simple:filtre before_save ne fonctionne pas

class Visit < ActiveRecord::Base 
    def before_save 
    self.visited_on = "test" 
    end 
end 

Pourtant, si je fais:

a = Visit.first 
a.user_id = 5 
a.save 
a.visited_on 
=> nil #WTF? 

Je sais que les filtres doivent retourner vrai, mais celui-ci est .. Quel pourrait être le problème? Etes-vous sûr que votre enregistrement est réellement enregistré?

Répondre

0

Si user_id est déjà 5 alors a.save n'effectuera pas l'enregistrement. De plus, si visit_on est une date et/ou une heure, alors "test" peut être converti en nil. Essayez d'utiliser l'heure actuelle ou quelque chose de similaire.

+0

Désolé, j'ai déjà fait ces tests. visited_on est un: string (je sais que c'est stupide mais c'est la seule façon que j'ai trouvée pour pouvoir utiliser Visit.count (: all,: group =>: visited_on) pour obtenir des résultats groupés par jour Et oui, J'ai changé l'utilisateur (ou tout autre attribut) en valeurs aléatoires avant d'essayer d'enregistrer.Je peux voir dans le journal que l'enregistrement est fait, mais le before_filter n'est pas exécuté. – Alain

0

Erreur typique de développement stupide: J'ai eu deux classes Visitez dans mon code. Je ne sais pas comment c'est arrivé mais la suppression de la classe vide a corrigé le problème. Désolée de vous avoir fait perdre votre temps.