2013-02-21 2 views
0

У меня есть поле в модели, которая сериализована, и когда я пытался проверить ее уникальность, она не работает. (Тем не менее на Rails 2.3 этого приложения)Рельсы 2.3. validates_uniqueness_ в сериализованном поле

приложения/модель/foo.rb

class foo < ActiveRecord::Base 

    serialize :rules 

    validates_uniqueness_of :rules 

end 

Я попытался сохранить содержимое в поле хэша вместо и проверить уникальность контента хэша-в. Затем я столкнулся с другой проблемой порядка обратных вызовов.

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 

Однако, посмотрев на того, Active Record обратных вызовов, before_save выполняется после проверки, поэтому он всегда будет действовать так как значение по умолчанию равно нулю, и после того, что он обновляется до нового контента хэш.

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

Может быть, я не соображал, любое решение этой проблемы?

Большое спасибо заранее.

ответ

1

Попробуйте это:

before_validation :update_content_hash