我有一些看起来像这样的代码:
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
吗?是吗?
答案 0 :(得分:1)
是的,您只能致电self.checkouts.save
。这将运行验证,如果验证通过则保存签出,然后运行关联的回调。如果要跳过验证,请使用bang的保存方法:save!
。