为什么我的Rails方法需要重新加载?

时间:2016-02-23 22:18:39

标签: ruby-on-rails

下面这个方法让我适合。我的目标是该方法将始终删除标题等于“坠落保护警告”的任何order_notes。然后,如果ismf_without_fall_protection?为真,则会添加一个新注释。

但是如果该方法没有包含重载的行,那么当ismf_without_fall_protection?为真时它就不能正常工作;如果我尝试在别处使用collector.order_notes集合,它会显示两个ord​​er_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

是什么给出的?有没有更好的方法来做这个不需要重新加载?

1 个答案:

答案 0 :(得分:0)

reload的唯一真正替代方案是致电reset。这会清除协会的缓存副本。

通过调用reload执行此操作的好处是,这会延迟加载关联的查询,直到实际需要它(可能永远不会),而不是总是招致它。

您可以手动改变关联目标(collector.order_notes.target),删除已删除的行,但这可能容易出错/易碎。