我发现了一个奇怪的例子,在关联实例化的ActiveRecord对象中添加错误。本案如期进行:
payment = Payment.new
# #<Payment:0x00007f996c3b8848 ...>
payment.errors.add(:base, 'some message')
payment.valid?
# false
但是,如果我尝试对从关联实例化的对象执行相同的操作,则错误不会阻止验证:
payment = Customer.payments.build
# #<Payment:0x00007f994d318538 ...>
payment.valid?
# true
payment.errors.add(:base, 'error')
# ["error"]
payment.errors
# #<ActiveModel::Errors:0x00007f8d2c00a5a8
@base= #<Payment:0x00007f8d20dcb680 id: nil>,
@details={:base=>[{:error=>"error"}]},
@messages={:base=>["error"]}>
## Yet, agonizingly --
payment.valid?
# true