AvtiveRecordでパスワードなどを暗号化したりする際コールバックを利用するのですが、存在しない列を読みに行こうとしてエラーになることがありました。とりあえず、対応方法を検討しました。
まず、ActiveRecordの中で列情報はAttributesに保存されていますがAttributesはハッシュなのでハッシュを扱うようにすればOKなのではないかと。
サンプルとして次のような処理を追加してみましたがうまく動作しました。(password列が存在しない場合は処理をしたくない)
[sourcecode language="ruby"] def enc_password # パスワード列が存在しない場合は処理を抜ける if !self.attributes.key? :password.to_s return end
self.password = ...
end [/sourcecode]
(*ハッシュのキーは文字列なのでシンボルではなく文字列を指定しています。)
テストを書いても書いても思わぬところでエラーが出ます。うっかりプロジェクト全体のテストを忘れてチェックインするとJenkinsからメールが飛んできます。仕組みというのはとても重要だと痛感しています(__;)