【发布时间】:2018-07-03 17:41:50
【问题描述】:
我试图弄清楚如何在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 本身正在重用设置器。
任何关于如何在 attr_encrypted 加密之前格式化的建议将不胜感激。
【问题讨论】:
-
试过
before_validation? -
谢谢,我确实尝试了 before_validation 并遇到了同样的问题。我相信这是因为我在回调方法中所做的事情。我想我必须将其设置为 self.ssn 才能使更改生效
标签: ruby-on-rails encryption attr