1

埋め込まれたドキュメントを使用して、ロシアの人形のようなキーベースのキャッシュの有効期限をどのように設定しますか? 37の信号で説明されているように

Mongoid 3.0touchで追加されbelongs_toたと思いますが、埋め込みドキュメントに対してどのように対処しますか?

クラスの例:

class House
  embeds_many :persons
end

class Person
  embedded_in :house
end

意見:

<% cache ['v1', house] do %>
  <%= house.some_attribute %>
  <% house.persons.each |person| %>
    <% cache ['v1' person] do %> 
      <%= render 'houses/person', person: person %>
    <% end %>
  <% end %>
<% end %>    

触れることを一般化する最も簡単な方法は何でしょうか? そのため、人を更新すると、その人が埋め込まれている家が触れられます。

編集:または、ここでの考え方は、すべての埋め込みアイテムを再レンダリングするのが比較的安価であるということでしょうか? もちろん、私はこれを行うことができます:

class Person
  after_save :touch_house
  def touch_house
    house.touch
  end
end
4

2 に答える 2

0

オブザーバーとの埋め込みタッチのデイジーチェーン接続を実装します。

class PersonObserver < Mongoid::Observer
  def sweep(person)
    person.house.touch
  end

  alias_method :after_update, :sweep
  alias_method :after_create, :sweep
end

人を更新または作成すると、その人の家に触れて、家のupdate_atタイムスタンプを効果的に更新します。

オブザーバーを使用するには、これをapplication.rbに追加します。

config.mongoid.observers = :person_observer
于 2012-10-17T17:11:49.423 に答える