Ruby on rails 在属性加密之前更改属性

Ruby on rails 在属性加密之前更改属性,ruby-on-rails,encryption,attr,Ruby On Rails,Encryption,Attr,我试图弄清楚在加密属性之前如何更改属性 在将数字保存到加密的数据库之前,我想删除数字中的破折号 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" },

我试图弄清楚在加密属性之前如何更改属性

在将数字保存到加密的数据库之前,我想删除数字中的破折号

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_加密将不再发挥其魔力。我假设这是因为attr_加密本身正在重用setter

如果您能就如何在attr_加密加密之前进行格式化提出任何建议,我们将不胜感激。

好的,我想出来了

做:

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

解决了问题

验证前尝试过
?谢谢,我在验证前尝试过,也遇到了同样的问题。我相信这是因为我在回调方法中所做的事情。我想我必须将其设置为self.ssn才能使更改保持不变