代码之家  ›  专栏  ›  技术社区  ›  cionescu

Rails与错误的关联无效

  •  0
  • cionescu  · 技术社区  · 5 年前

    我发现了一个奇怪的例子,在关联实例化的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
    

    0 回复  |  直到 5 年前
        1
  •  -2
  •   Marek Lipka    5 年前

    这些案件的区别在于 payment.customer 属性,它可能会被验证是否存在(至少),并且在您的第二个实例(返回的那个实例)中确实存在 true