【问题标题】:Rails association with errors is not invalidRails 与错误的关联不是无效的
【发布时间】: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? 重置errorspayment.errors 在第二次payment.valid? 调用后返回什么?
  • 没错。这是 ActiveModel 验证的默认行为。我的困惑是为什么第一种情况有效(即当模型没有从关联中实例化时)

标签: ruby-on-rails activerecord rails-activerecord


【解决方案1】:

这些情况之间的区别是payment.customer 属性,它可以被验证是否存在(至少)并且实际上存在于您的第二种情况(返回true)并且在第一种情况下不存在,因此你(可能)得到验证错误。当然我不确定,因为我没有看到你的模型。但它必须是这样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多