2017-06-14 7 views
-1

Studentモデルには2つのフィールドsecret_questionsecret_answerがあります。これら2つのフィールドは暗号化された形式で保存されます。私はencryptafter_saveを実行し、これらのフィールドを暗号化する方法を持っています。私はdecryptメソッドを持っていますdecryptこれらの2つのフィールドと負荷データをメモリにロードします。例の下にあなたがレコードがデフォルトでアクセスされるたびに特定のメソッドを呼び出す方法

def decrypt 
    # notice that i dont save the decrypted data, it is just loaded into the memory 
    self.secret_question = decrypt_data(secret_question) 
    self.secret_answer = decrypt_data(secret_answer) 
    self 
end 

を理解するのに役立ちます。このアプローチの問題は、私はdecrypt方法私はこれらの必要なフィールドを計算/ /使用することを示さなければならないたびに呼び出す必要があります。

Studentモデルを呼び出すたびに、これら2つのフィールド(secret_questionおよびsecret_answer)が復号化されるように、私は何らかの方法を探しています。

これまでのところ、私はstudent

def self.find(*args) 
    s = super(*args) 
    s.decrypt 
    s 
end 

で、この中で行っているが、これらはデフォルトで呼び出されるdecryptメソッドを持って文句を言わないassociationsすなわちschool_class.studentsでは動作しない場合があります。 studentモデルにアクセスするたびにdecryptメソッドを呼び出す方法はありますか?

PS:上記のような例があり、データを暗号化することは我々のビジネス要件です。

答えて

2

after_initializeが役立ちます。

新しいオブジェクトでもafter_initializeがトリガーされるため、ガード条件を設定することもできます。

例:

after_initialize :decrypt, if: :persisted? 
+0

申し訳ありませんが、以前に間違ったリンクを入れていたが、今 –

+0

恐ろしい更新しました。どうやってそんなにばかげたことを逃すことができますか? –

関連する問題