在 attr_encrypted 加密之前更改属性
Changing attribute before attr_encrypted encrypts
我想弄清楚如何在 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 控制台中不起作用。我一辈子都想不出还有什么办法可以做到这一点。我最初尝试使用 setter,但如果我这样做,attr_encrypted 将不再发挥它的魔力。我假设这是因为 attr_encrypted 本身正在重用 setter。
任何关于如何在 attr_encrypted 加密之前格式化的建议将不胜感激。
好的,我明白了。
正在做:
def format_ssn
return if ssn.nil?
self.ssn = ssn.delete!("-")
end
解决问题
我想弄清楚如何在 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 控制台中不起作用。我一辈子都想不出还有什么办法可以做到这一点。我最初尝试使用 setter,但如果我这样做,attr_encrypted 将不再发挥它的魔力。我假设这是因为 attr_encrypted 本身正在重用 setter。
任何关于如何在 attr_encrypted 加密之前格式化的建议将不胜感激。
好的,我明白了。
正在做:
def format_ssn
return if ssn.nil?
self.ssn = ssn.delete!("-")
end
解决问题