1

这个问题总结了一下。是否可以通过简单地不保存记录而不是抛出错误来响应自定义验证?据我所知,编写自定义验证的唯一方法是调用如下错误:

def at_least_one_attribute_has_changed
  if no_changes?
    errors[:base] << I18n.t("activerecord.errors.messages.we_did_not_detect_any_changes")
  end
end

也许有更温和的方法?skip_save一些我不熟悉的神秘电话?

4

1 回答 1

2

您是否特别希望验证失败而没有消息,或者您是否想尝试保存对象并在对象无效时失败而没有错误?

对于前者,您可能不走运,.valid?调用会检查对象上的错误,因此如果您没有任何消息,则该对象将被视为有效。

对于后者,如果保存失败,您可以清除错误或重新加载对象,以适合您的用例为准。

unless @object.save
  @object.errors.clear # if object has had attributes changed this will preserve those changes but remove the errors.
end

如果您提供有关您为什么要这样做的更多信息,可能会有更合适的回应。

于 2013-05-23T12:36:14.840 回答