我在我的应用程序中有很多has_many :through关系。我正在广泛展示与此相关的信息,例如连接对象的数量。每当用户更新关系时,连接表都会被修改,我可以通过Sweepers捕获到这一点。
问题在于,连接表条目被删除,而不是销毁。如果关系不存在了,我没有合理的方法来检测它,我从缓存中显示的信息是误导性的。所有像:touch => true或:counter_cache => true的东西部分起作用。如果关系被更新或创建,它会增加。但是,如果用户删除关系,什么也不会发生。:counter_cache被破坏,:touch不触发。
垃圾解决方案是在控制器中调用.touch,当保存主模型时。这种方法似乎非常不专业。这应该在模型逻辑中处理,而不是在控制器中。
我觉得我错过了一些重要的东西,但是无法理解这个问题。有人能够对这个问题提出一些见解吗?
问题在于,连接表条目被删除,而不是销毁。如果关系不存在了,我没有合理的方法来检测它,我从缓存中显示的信息是误导性的。所有像:touch => true或:counter_cache => true的东西部分起作用。如果关系被更新或创建,它会增加。但是,如果用户删除关系,什么也不会发生。:counter_cache被破坏,:touch不触发。
垃圾解决方案是在控制器中调用.touch,当保存主模型时。这种方法似乎非常不专业。这应该在模型逻辑中处理,而不是在控制器中。
我觉得我错过了一些重要的东西,但是无法理解这个问题。有人能够对这个问题提出一些见解吗?
authorships
)添加回调函数,您只需要在关联模型(authors
)上添加dependent: :destroy
即可。 - tight