我的某个模型中有一个加密属性(我们称之为@ model.encrypted_attribute)。在添加加密之前,我在我的模型中进行了以下验证:
validates_length_of :attribute, :minimum => 11, :maximum => 11, :allow_blank => true,
:message => "| Your attribute must be 11 digits long."
我还有一个运行before_save
的方法,它会从属性中删除所有非数字字符。但是,现在,我无法弄清楚如何:
gsub!(/\D/, '')
或者之后运行它并使用attr-encrypted重新加密@model.attribute
值并将其写回数据库。我可以删除字符,但不能重新加密/保存。在保存之前,对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
有没有人知道我如何能够实现上述一个或两个,或者至少在attr_encrypted之前设置一个自定义方法来运行。
------------- -------------编辑
对于在搜索时遇到此问题的人员,可以在Validation of encrypted data