缓存摘要和Mongoid Touch

时间:2013-10-02 13:37:22

标签: ruby-on-rails mongoid

我有一些模型,其中父模型需要触摸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

在这种情况下有什么用?当必须仅启动层次结构时,是否需要使用这些回调?文档不清楚假设如何运作。任何人都可以为我澄清一下吗?感谢。

1 个答案:

答案 0 :(得分:0)

我自己遇到过这个问题。基于after_save / before_save解决方案,您可能已经遇到过这个GitHub问题,但其要点是触摸选项正在按预期工作。也就是说它只会在创建或销毁子文档时触发(有一个奇怪的破坏案例也没有完全覆盖)。

https://github.com/mongoid/mongoid/issues/2373