ruby-on-rails – 如何触及HABTM关系
发布时间:2020-12-16 20:14:21 所属栏目:百科 来源:网络整理
导读:如果您有两个模型,视频和类别,并且它们之间具有“has_and_belongs_to_many”关系,那么当其中一个更改时,如何执行触摸来使缓存失效? 你不能像“一对多”关系那样对他们进行“触摸”.现在,当我更改类别名称时,属于该类别的视频在使缓存无效之前不知道更改.我
如果您有两个模型,视频和类别,并且它们之间具有“has_and_belongs_to_many”关系,那么当其中一个更改时,如何执行触摸来使缓存失效?
你不能像“一对多”关系那样对他们进行“触摸”.现在,当我更改类别名称时,属于该类别的视频在使缓存无效之前不知道更改.我的视图模板显示每个视频的类别名称. 解决方法
触摸只能在两种情况下使用.
记录在案 category = Category.first category.touch 关于belongs_to关系 belongs_to :category,:touch => true 所以如果你想使用它与HABTM关系,恐怕你必须手动做.它可能是这样的: class Category before_save :touch_videos def touch_videos videos.touch end end class Video def self.touch update_attributes(:updated_at => Time.now) # or each { |video| video.touch } # Make a proper touch end end 请注意,如果您想允许视频触摸类别,则必须找到避免“循环”更新的方法. 每个& find_each 如果您喜欢使用update_attributes,请使用find_each批量加载记录.这将避免在内存中同时加载所有记录,并可能导致应用程序崩溃.如果您没有10k的记录,您可能看不到任何差异,但是随着您的表格的增长,如果您使用每个记录,它将变慢或甚至破裂. find_each(batch_size: 2000) { |video| video.touch } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |