2013-02-21 2 views
0

J'ai un champ dans un modèle qui est sérialisé et quand j'ai essayé de valider l'unicité de celui-ci, cela ne fonctionne pas. (Toujours on Rails 2.3 sur cette application)Rails 2.3. validates_uniqueness_of un champ sérialisé

app/modèles/foo.rb

class foo < ActiveRecord::Base 

    serialize :rules 

    validates_uniqueness_of :rules 

end 

J'ai essayé de stocker le contenu dans un champ de hachage au lieu et valider l'unicité du hachage de contenu. Puis j'ai couru vers un autre problème de l'ordre des rappels.

require 'digest/md5' 

class foo < ActiveRecord::Base 

    before_save :update_content_hash 

    validates_uniqueness_of :content_hash 

    def update_content_hash 
     self.content_hash = OpenSSL::Digest::SHA1.hexdigest(self.rules.flatten) 

    end 
end 

Cependant, après avoir examiné l'ordre de callbacks Active Record, before_save est exécuté après validation, il sera toujours valable parce que la valeur par défaut est nul et après qu'il a mis à jour le nouveau hachage contenu.

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Peut-être que je ne pense pas droit, une solution à cela?

Merci beaucoup à l'avance.

Répondre

1

Essayez ceci:

before_validation :update_content_hash 
Questions connexes