在attr_encrypted加密之前更改属性

时间:2018-07-03 17:41:51

标签: ruby-on-rails encryption attr

我正在尝试找出如何在attr_encrypted进行加密之前更改属性。

我想从数字中删除破折号,然后再将其保存到加密的数据库中。

attr_encrypted :ssn, key: Rails.application.secrets.secret_encrypt_key
validates :ssn, format: { with: /\d{3}-\d{2}-\d{4}/,
                          message: "SSN must be separated by dashes" },
                allow_nil: true
validates :ssn, length: { is: 11 }, allow_nil: true

before_save :format_ssn

def format_ssn
  return if ssn.nil?
  ssn.delete!("-")
end

这是我目前拥有的。它在Rails控制台中不起作用。我一辈子都无法想像还有其他方法可以做到这一点。我本来尝试使用二传手,但是如果我这样做的话,attr_encrypted将不再具有魔力。我假设这是因为attr_encrypted本身正在重用setter。

任何有关attr_encrypted加密之前如何格式化的建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

好吧,我知道了。

正在做:

  def format_ssn
    return if ssn.nil?
    self.ssn = ssn.delete!("-")
  end

解决了问题