【问题标题】:Changing attribute before attr_encrypted encrypts在 attr_encrypted 加密之前更改属性
【发布时间】: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


【解决方案1】:

好的,我想通了。

在做:

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

解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多