【发布时间】:2020-02-14 12:30:36
【问题描述】:
我发现这种奇怪的情况是向从关联实例化的 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
有人对我在这里缺少什么有任何想法吗?
【问题讨论】:
-
valid?重置errors,payment.errors在第二次payment.valid?调用后返回什么? -
没错。这是 ActiveModel 验证的默认行为。我的困惑是为什么第一种情况有效(即当模型没有从关联中实例化时)
标签: ruby-on-rails activerecord rails-activerecord