在使用attr-encrypted gem加密属性之前执行rails模型验证

时间:2015-09-25 18:54:02

标签: ruby-on-rails ruby validation encryption attr-encrypted

我的某个模型中有一个加密属性(我们称之为@ model.encrypted_attribute)。在添加加密之前,我在我的模型中进行了以下验证:

validates_length_of :attribute, :minimum => 11, :maximum => 11, :allow_blank => true, 
:message => "| Your attribute must be 11 digits long."

我还有一个运行before_save的方法,它会从属性中删除所有非数字字符。但是,现在,我无法弄清楚如何:

  1. 在加密并保存之前对属性运行gsub!(/\D/, '')或者之后运行它并使用attr-encrypted重新加密@model.attribute值并将其写回数据库。我可以删除字符,但不能重新加密/保存。
  2. 在保存之前,对attribute的非加密值运行验证。我尝试在before_block中添加以下代码,但后来我得到了一个不同的错误(undefined method '12345678' for #<Spree::Order:0x007fae02011cd0):

      def format_attribute
        validates_length_of self.attribute.gsub(/\D/, ''), :minimum => 9, :maximum => 9, :allow_blank => true, :message =>
        "| Your attribute should be 9 digits long."
    end    
    
  3. 有没有人知道我如何能够实现上述一个或两个,或者至少在attr_encrypted之前设置一个自定义方法来运行。

    ------------- -------------编辑
    对于在搜索时遇到此问题的人员,可以在Validation of encrypted data

    找到解决方法。

0 个答案:

没有答案