シリアル化されたモデルにフィールドがあり、その一意性を検証しようとしてもうまくいきません。(このアプリではまだ Rails 2.3 を使用しています)
アプリ/モデル/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 が実行されるため、デフォルト値が nil であるため常に有効であり、その後、新しいコンテンツ ハッシュに更新されます。
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
多分私はまっすぐに考えていません、これに対する解決策はありますか?
よろしくお願いします。