下面这个方法让我适合。我的目标是该方法将始终删除标题等于“坠落保护警告”的任何order_notes。然后,如果ismf_without_fall_protection?
为真,则会添加一个新注释。
但是如果该方法没有包含重载的行,那么当ismf_without_fall_protection?
为真时它就不能正常工作;如果我尝试在别处使用collector.order_notes
集合,它会显示两个order_notes而不是我期望的那个。
def reconcile_fall_protection
collector.order_notes.where(title: 'Fall Protection Warning').destroy_all
return unless ismf_without_fall_protection?
collector.order_notes.reload #????
collector.order_notes.create(title: 'Fall Protection Warning',
description: 'No fall protection')
end
是什么给出的?有没有更好的方法来做这个不需要重新加载?
答案 0 :(得分:0)
reload
的唯一真正替代方案是致电reset
。这会清除协会的缓存副本。
通过调用reload
执行此操作的好处是,这会延迟加载关联的查询,直到实际需要它(可能永远不会),而不是总是招致它。
您可以手动改变关联目标(collector.order_notes.target
),删除已删除的行,但这可能容易出错/易碎。