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

错误修复。如何运行回调和保存而不是验证?

  •  0
  • Jwan622  · 技术社区  · 7 年前

    我有一些代码如下所示:

    def checkout(batch, checkout_user)
         ...
        if self.checkouts.build(removed_at: Time.now, checkout_location: batch.checkout_location, user: checkout_user, checkout_batch: batch)
          update_attribute(:library_status, 'Checked out')
    
          ...
    

    我不想再这样了 update_attribute(:library_status) 因为我不想将状态标记为“签出”。但是,我确实希望保存构建的签出(关联),因为如果 batch 对象未与 checkout

    CheckoutBatch 型号:

    has_many :catalog_items, through: :checkouts
    

    batch.catalog_items 不会归还任何东西除非 结帐 是因为我得到了 catalog_items 通过结账。

    那么,如何保存签出和回扣回调(就像更新属性一样),但不更新任何属性呢?我能打个电话吗 self.checkouts.save ? 是这样吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Matthew Heath    7 年前

    是的,你可以打电话 self.checkouts.save . 它将运行验证,如果验证通过,则保存签出,然后运行关联的回调。如果要跳过验证,请使用save的bang方法: save! .