1

モデルの 1 つに暗号化された属性 (@model.encrypted_attribute と呼びましょう) があります。暗号化を追加する前に、モデルで次の検証を行いました。

validates_length_of :attribute, :minimum => 11, :maximum => 11, :allow_blank => true, 
:message => "| Your attribute must be 11 digits long."

before_saveまた、属性から数値以外のすべての文字を gsub アウトするメソッドも実行しました。ただし、現在、次の方法がわかりません。

  1. 属性を暗号化して保存する前に実行gsub!(/\D/, '')するか、後で実行し、attr-encrypted で@model.attribute値を再暗号化してデータベースに書き戻します。文字を取り除くことはできますが、再暗号化/保存することはできません。
  2. attribute保存する前に、暗号化されていない値に対して検証を実行します。次のコードを before_block に追加しようとしましたが、別のエラー ( undefined method '12345678' for #<Spree::Order:0x007fae02011cd0)が発生します。

      def format_attribute
        validates_length_of self.attribute.gsub(/\D/, ''), :minimum => 9, :maximum => 9, :allow_blank => true, :message =>
        "| Your attribute should be 9 digits long."
    end    
    

上記のいずれかまたは両方を達成する方法、または少なくとも attr_encrypted が機能する前に実行するカスタムメソッドを設定する方法を知っている人はいますか?

--------------編集-------------検索中にこれに遭遇した人のために上記の2つを残しますが、その解決策は暗号化の検証で
見つけることができますデータ

4

0 に答える 0