错误修复。如何运行回调并保存但不保存验证?

时间:2018-10-27 23:35:16

标签: ruby-on-rails

我有一些看起来像这样的代码:

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,否则看起来像checkout的代码不会返回任何内容,因为我通过结帐得到了catalog_items

那么,如何保存检出和启动回调(如update_attributes一样)却不更新任何属性?我可以打电话给self.checkouts.save吗?是吗?

1 个答案:

答案 0 :(得分:1)

是的,您只能致电self.checkouts.save。这将运行验证,如果验证通过则保存签出,然后运行关联的回调。如果要跳过验证,请使用bang的保存方法:save!