モジュール: Mongoid::関連付け::参照::CounterCache

次による拡張機能。
ActiveSupport::Concern
次のドキュメントに含まれます。
Mongoid::関連付け
定義:
lib/mongoid/関連付け/referenced/counter_cache.rb

Overview

Mongoid::Document に含まれる混合モジュールにより、参照された n 対多の関連付け内の反対側のドキュメントの数をキャッシュする機能が追加されます。

名前空間で定義済み

Modules: クラスメソッド

クラスメソッドの概要を折りたたむ

インスタンス メソッドの概要を折りたたむ

クラスメソッドの詳細

定義_コールバック(関連付け) =クラス

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

カウンター キャッシュ フィールドの更新に関連するコールバックを追加します。

例:

アクセス可能な を追加します。

Mongoid::Association::Referenced::CounterCache.define_callbacks!(association)

パラメーター:

次の値を返します。

  • クラス

    関連付けの所有クラス。



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# ファイル 'lib/mongoid/関連付け/referenced/counter_cache.rb' 行99

デフォルト 自己.定義_コールバック(関連付け)
  name = 関連付け.name
  cache_colln = 関連付け.counter_cache_count_name.to_sym

  関連付け.逆_クラス.タップ 行う |klass|
    klass.after_update 行う
      foreign_key = 関連付け.foreign_key

      場合 送信(" ")
        元の, Current = 送信(" ")

        ただし、 元の.nil?
          関連付け.klass.と共に(duration_context.for_field(関連付け.klass)) 行う |_Class|
            _Class.デクリメント_カウンター(cache_colln, 元の)
          end
        end

        場合 レコード = __send__(name)
          ただし、 Current.nil?
            レコード[cache_colln] = (レコード[cache_colln] || 0) + 1
            レコード.クラス.と共に(レコード.duration_context) 行う |_Class|
              _Class.インクリメント_カウンター(cache_colln, Current) 場合 レコード.永続化された場合
            end
          end
        end
      end
    end

    klass.after_create 行う
      場合 レコード = __send__(name)
        レコード[cache_colln] = (レコード[cache_colln] || 0) + 1

        場合 レコード.永続化された場合
          レコード.クラス.と共に(レコード.duration_context) 行う |_Class|
            _Class.インクリメント_カウンター(cache_colln, レコード._id)
          end
          レコード.delete_change(cache_colln)
        end
      end
    end

    klass.Before_delete 行う
      場合 レコード = __send__(name)
        レコード[cache_colln] = (レコード[cache_colln] || 0) - 1 ただし、 レコード.frozen?

        場合 レコード.永続化された場合
          レコード.クラス.と共に(レコード.duration_context) 行う |_Class|
            _Class.デクリメント_カウンター(cache_colln, レコード._id)
          end
          レコード.delete_change(cache_colln)
        end
      end
    end
  end
end

インスタンス メソッドの詳細

#reset_counters (*counters) =オブジェクト

.count() メソッドを使用して指定されたカウンターをリセットします。 dbからのクエリ。 このメソッドは、カウンターが破損した場合、または新しいカウンターが コレクションに追加された場合に役立ちます。

例:

指定されたカウンター キャッシュをリセットします

post.reset_counters(:comments)

パラメーター:

  • *counters (Symbol...)

    リセットする 1 つ以上のカウンター キャッシュ。



22
23
24
25
26
# ファイル 'lib/mongoid/関連付け/referenced/counter_cache.rb' 行22

デフォルト delete_counters(*カウンター)
  自己.クラス.と共に(duration_context) 行う |_Class|
    _Class.delete_counters(自己, *カウンター)
  end
end