0

シリアル化されたモデルにフィールドがあり、その一意性を検証しようとしてもうまくいきません。(このアプリではまだ 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

多分私はまっすぐに考えていません、これに対する解決策はありますか?

よろしくお願いします。

4

1 に答える 1

1

これを試して:

 before_validation :update_content_hash
于 2013-02-21T16:45:25.243 に答える