检查before_update过滤器中字段的值是否已更改

xav*_*r23 6 ruby activerecord ruby-on-rails

我有一个数据库字段,我想存储我的密码.在我的模型中的before_create过滤器中,我调用加密函数并从明文保存到加密文本.

我现在想要使用before_update进行加密,但仅限于值已更改.如何编写检查字段值是否已更改的条件?

Far*_*rel 26

如果该字段被称为名称则

object.name_changed?
Run Code Online (Sandbox Code Playgroud)

将返回真实.


hur*_*n77 4

由于您通常不会使用要向表单公开的字段将密码存储在模型中,因此仅更新它unless password.blank?并将真实密码放在不会向表单公开的字段“hashed_pa​​ssword”中就足够了。

感谢 Ben(见下文)指出额外保护您的加密密码,attr_protected以便无法从表单直接访问/更新它。+1

  • 您可以使用 attr_protected 来帮助您处理所描述的 hurikhan77。 (2认同)