【问题标题】:Rails validation "failing when succeeding"Rails 验证“成功时失败”
【发布时间】:2010-04-01 10:01:15
【问题描述】:

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

【问题讨论】:

  • 你能格式化你的代码吗?
  • 新..这里不知道如何,但谢谢史蒂夫。

标签: ruby-on-rails ruby validation activerecord


【解决方案1】:

好的,找到问题了。 我使用了一个自定义更新属性,它曾经看起来像:

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,因此会产生错误。

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多