4

Rails 4 アプリケーションがあり、attr_encryptedgem を使用して SSN を暗号化された形式で DB に保存しています。

私がやろうとしているのは、フォームの編集/表示時に最後の 4 桁のみを表示することです。そのため、基本的に SSN が保存されると、ユーザーはフォームで完全な SSN を見ることができなくなります。だから私は次のことをやってみました、

class PaymentData < ActiveRecord::Base
  attr_encrypted :ssn, key: 'secret'

  alias_method :org_ssn, :ssn
  def ssn
    org_ssn.reverse # just a way of testing if this works
  end
end

私が見ているのは、を使用するショーフォームで、<%= @payment_data.ssn %>正常に動作することです。しかし、を使用している私の編集フォームでは<%= f.input :ssn %>、編集フィールドに完全な SSN が事前入力されています。

注:simple_formフォームに gem を使用していますが、基本的な<%= f.text_field :ssn %>構文を使用すると、同じ完全な SSN が表示されます。

ここで何が間違っていますか?

4

2 に答える 2

3

これが私がやったことです。

def obfuscated_ssn
  return ssn unless ssn && ssn.size > 3
  ssn.last(4).rjust(ssn.length, '*')
end

def obfuscated_ssn=(ssn)
  self.ssn = ssn unless ssn.include?('*')
end

これは少しハックですが、編集された文字列で SSN を表示しますが*、データベースに不正なデータが入らないように、編集されたビットで文字列を保存しません。

于 2013-11-23T01:45:55.683 に答える