我在user.rb中有这个:
attr_accessor :old_password
def validate
unless password.nil?
errors.add_to_base("Old password entered incorrect") unless self.valid_password? old_password
end
end
我将old_password作为一个虚拟属性,在更新为新密码之前必须将其验证为与当前匹配。我的问题是,在正确输入(密码==密码确认和self.valid_password?old_password)后,错误将产生并将我传回表单。奇怪的是,数据实际上会在数据库中更新,而且输入错误;虽然它会产生相同的错误(“旧密码输入不正确”)。到底是我做错了什么?
答案 0 :(得分:0)
def custom_update_attributes(userparams, updater)
unless updater.may_change_user_role_name? self
userparams.delete(:role_name)
userparams.delete(:active)
end
self.update_attributes(userparams)
save
end
这里显而易见的问题是保存,即使我将def validate
更改为def validate_on_update
,此验证也已在保存操作上运行,并且由于未提供old_password,因此将产生错误。< / p>