【问题标题】:Ruby on Rails - after_validation if valid?Ruby on Rails - after_validation(如果有效)?
【发布时间】:2011-11-04 13:44:53
【问题描述】:

目前,据我所知,即使模型未通过验证,after_validation 也会被调用。有没有办法只在模型有效的情况下调用它?我尝试在after_validation 方法中添加return false unless self.valid?,但这会再次触发验证并创建一个无限循环。

【问题讨论】:

  • 好吧,您可以检查errors,例如return false unless self.errors.empty?return false if errors.any?

标签: ruby-on-rails ruby validation


【解决方案1】:

失败的验证增加了记录的错误,所以你可以检查一下:

return false unless self.errors.empty?

【讨论】:

  • 我以前试过这个,但还是失败了。然后我检查了代码,我注意到我再次调用了验证(当我不应该这样做的时候)。现在它完美无缺。谢谢!
【解决方案2】:

您是否考虑过使用 before_save 回调?

我相信只有在对象有效时才会调用它。

【讨论】:

  • 不想保存怎么办?只是想验证它?
  • 您也不能在before_save 中执行更高级的操作,例如检查关联中更改的字段(通过xxx_changed?),因为关联首先更新,从而重置changed 哈希。因此,作为一种解决方法,有必要在 after_validation 中执行这些检查。
【解决方案3】:

我知道这是一个老问题,但是在我创建的模型上使用自定义验证时遇到了同样的错误。查看docs 有一部分涵盖了自定义方法,它指出每次.valid? 方法都会调用此类验证。这可能是触发:after_validation 回调时触发无限循环的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多