Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 缓存难题:终止已删除的模型_Ruby On Rails_Caching - Fatal编程技术网

Ruby on rails 缓存难题:终止已删除的模型

Ruby on rails 缓存难题:终止已删除的模型,ruby-on-rails,caching,Ruby On Rails,Caching,我需要在更新后使父模型的缓存过期,但是如果更新删除了父关联,将找不到父模型,因此缓存不会过期。沃特多&___& 这实际上是他的问题,所以他会补充任何澄清。更新后确实是您所需要的,尽管可能当时协会也已经消失了。 我建议通过创建一个只对删除的关联执行puts的after_更新来测试这个假设。如果你还能把它拿来,那就好了。使用该选项清除缓存片段 否则,我会建议使用一种粗略的回调,有点粗糙,但应该可以满足您的需要: 在before\u update回调中,为您的关联保存一个@variable,然后检查它

我需要在更新后使父模型的缓存过期,但是如果更新删除了父关联,将找不到父模型,因此缓存不会过期。沃特多&___&


这实际上是他的问题,所以他会补充任何澄清。

更新后确实是您所需要的,尽管可能当时协会也已经消失了。 我建议通过创建一个只对删除的关联执行puts的after_更新来测试这个假设。如果你还能把它拿来,那就好了。使用该选项清除缓存片段

否则,我会建议使用一种粗略的回调,有点粗糙,但应该可以满足您的需要:

在before\u update回调中,为您的关联保存一个@variable,然后检查它们在before\u update中是否已更改

before_update :save_associations
after_update :expire_old_associations
def save_associations
   @associations_to_check = self.widgets
end
def expire_old_associations
   diff = @associations_to_check - self.widgets
   expire_fragments_for(diff) if diff.present?
end
请参见此处的可用回调:


你能提供更多的信息吗?e、 g.您使用的语言/框架是什么?你试过什么。。。我正在使用rails,在清理程序中使用after_update调用使片段缓存过期。我想我可以只使用before_update,这存在吗?你让它工作了吗?我的回答有用吗?实际上没有模型被破坏,只是一个关联被删除了。也许我可以用notify_observer?或者我需要根据我的模型设置:dependent属性吗?啊,我误解了你的要求。依赖关系也与你破坏时发生的事情有关,所以它是有用的,但不是你需要的。我会适当地编辑我的答案。