我有一些模型,其中父模型需要触摸updated_at字段以使缓存摘要无效。以下是我的基本(简化)模型:
class Location
include Mongoid::Document
include Mongoid::Timestamps
has_many :departments
field :name, type: String
end
class Department
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :location, touch: true
has_many :positions
field :name, type: String
end
class Position
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :department, touch: true
field :name, type: String
end
如果我创建一个新职位,会触及部门和位置的祖先。不幸的是,如果我更新或删除职位,没有任何反应。我已经看到需要手动调用触摸的引用,例如:
after_save :touch
before_destroy :touch
在这种情况下有什么用?当必须仅启动层次结构时,是否需要使用这些回调?文档不清楚假设如何运作。任何人都可以为我澄清一下吗?感谢。
答案 0 :(得分:0)
我自己遇到过这个问题。基于after_save / before_save解决方案,您可能已经遇到过这个GitHub问题,但其要点是触摸选项正在按预期工作。也就是说它只会在创建或销毁子文档时触发(有一个奇怪的破坏案例也没有完全覆盖)。