0
データベースに保存する前に、2つのフィールドを暗号化するモデルにbefore_saveコールバックがあります。before_save複数回呼び出しを作成する
class Account < ActiveRecord::Base
before_save :encrypt_credentials, if: "!username.blank? && !password.blank?"
def encrypt_credentials
crypt = ActiveSupport::MessageEncryptor.new(ENV['KEY'])
self.username = crypt.encrypt_and_sign(username)
self.password = crypt.encrypt_and_sign(password)
end
def decrypted_username
crypt = ActiveSupport::MessageEncryptor.new(ENV['KEY'])
crypt.decrypt_and_verify(username)
end
def decrypted_password
crypt = ActiveSupport::MessageEncryptor.new(ENV['KEY'])
crypt.decrypt_and_verify(password)
end
end
状況はDevise models run before_save multiple times?と非常によく似ています。 Model.create!(...)を呼び出すと、暗号化が必要な2つのフィールドがあり、before_saveは2回呼び出され、2回暗号化されたフィールドに終わります。
Account.create!(
{
username: ENV['USERNAME'],
password: ENV['PASSWORD']
})
なぜbefore_saveが複数回呼び出されますか?私は上記のリンク先の解決策が気に入らず、新しい/ビルドの後に保存をしたくありません。