Rails验证“成功时失败”

时间:2010-04-01 10:01:16

标签: ruby-on-rails ruby validation activerecord

我在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)后,错误将产生并将我传回表单。奇怪的是,数据实际上会在数据库中更新,而且输入错误;虽然它会产生相同的错误(“旧密码输入不正确”)。到底是我做错了什么?

1 个答案:

答案 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>