Rails 为什么调用.valid?删除我的错误消息

Rails why is calling .valid? removing my error messages

在我的 @item 实例上调用 ActiveModel::Validations#valid? 正在删除我的错误消息。这最好用例子来说明。

[1] pry(#<ChangeObjectsController>)> @item.errors.add(:new_error, "new error has occurred")
=> ["new error has occurred"]
[2] pry(#<ChangeObjectsController>)> @item.errors.full_messages
=> ["Connection error has occurred", "New error new error has occurred"]
[3] pry(#<ChangeObjectsController>)> @item.valid?
=> true
[4] pry(#<ChangeObjectsController>)> @item.errors.full_messages
=> []

在我的模型中 class 我包括验证库(注意它不继承自 ActiveRecord::Base):

  include ActiveModel::Validations
  extend ActiveModel::Naming

错误信息是这样添加的: 任何人都可以澄清这个问题吗?例如,这是我想要的行为吗?我没有正确使用它?

这是正常行为。如果 valid? 返回 true 但有错误消息,则不一致。您可以在 rails source 中看到 valid? 明确清除了错误消息。

添加错误消息的正常方法是通过验证,无论是内置验证还是自定义验证。