모듈: Mongoid::Association::Referenced::CounterCache

확장자:
ActiveSupport::Concern
포함 항목:
Mongoid::Association
다음에 정의됨:
lib/mongoid/association/referenced/counter_cache.rb

개요

Mongoid::Document에 포함된 Mixin 모듈은 참조된 n-to-many 연관 관계에서 반대편 문서의 수를 캐시 하는 기능 을 추가합니다.

네임스페이스 아래에 정의됨

모듈: 클래스 메서드

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

클래스 메서드 세부 정보

.정의_콜백!(association) ⇒ 클래스

이 메서드는 비공개 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/association/referenced/counter_cache.rb', 줄 99

def self.정의_콜백!(연관 관계)
  이름 = 연관 관계.이름
  cache_column = 연관 관계.counter_cache_column_name.to_sym

  연관 관계.inverse_class. do |class|
    class.after_update do
      foreign_key = 연관 관계.foreign_key

      만약 send("#{foreign_key}_previously_changed?")
        원본, Current = send("#{foreign_key}_previous_change")

        하지 않는 한 원본.nil?
          연관 관계.class.(persistence_context.for_child(연관 관계.class)) do |_class|
            _class.decrement_counter(cache_column, 원본)
          end
        end

        만약 기록 = __send__(이름)
          하지 않는 한 Current.nil?
            기록[cache_column] = (기록[cache_column] || 0) + 1
            기록.클래스.(기록.persistence_context) do |_class|
              _class.증분_카운터(cache_column, Current) 만약 기록.지속되었나요?
            end
          end
        end
      end
    end

    class.after_create do
      만약 기록 = __send__(이름)
        기록[cache_column] = (기록[cache_column] || 0) + 1

        만약 기록.지속되었나요?
          기록.클래스.(기록.persistence_context) do |_class|
            _class.증분_카운터(cache_column, 기록._id)
          end
          기록.remove_change(cache_column)
        end
      end
    end

    class.before_destory do
      만약 기록 = __send__(이름)
        기록[cache_column] = (기록[cache_column] || 0) - 1 하지 않는 한 기록.동결?

        만약 기록.지속되었나요?
          기록.클래스.(기록.persistence_context) do |_class|
            _class.decrement_counter(cache_column, 기록._id)
          end
          기록.remove_change(cache_column)
        end
      end
    end
  end
end

인스턴스 메서드 세부 정보

#reset_counters(*counters) ⇒ 객체

.count() 메서드를 사용하여 지정된 카운터를 재설정합니다. db에서 쿼리합니다. 이 메서드는 카운터가 손상되었거나 새 카운터가 컬렉션에 추가된 경우에 유용합니다.

예시:

지정된 카운터 캐시 재설정

post.reset_counters(:comments)

매개변수:

  • *counters (기호...)

    재설정할 하나 이상의 카운터 캐시입니다.



22
23
24
25
26
# 파일 'lib/mongoid/association/referenced/counter_cache.rb', 줄 22

def reset_counters(*카운터)
  self.클래스.(persistence_context) do |_class|
    _class.reset_counters(self, *카운터)
  end
end