모듈: Mongoid::Association::Referenced::CounterCache
- 확장자:
- ActiveSupport::Concern
- 포함 항목:
- Mongoid::Association
- 다음에 정의됨:
- lib/mongoid/association/referenced/counter_cache.rb
개요
Mongoid::Document에 포함된 Mixin 모듈은 참조된 n-to-many 연관 관계에서 반대편 문서의 수를 캐시 하는 기능 을 추가합니다.
네임스페이스 아래에 정의됨
모듈: 클래스 메서드
클래스 메서드 요약 접기
-
.정의_콜백!(association) ⇒ 클래스
비공개
카운터 캐시 필드 업데이트를 담당하는 콜백을 추가합니다.
인스턴스 메서드 요약 접기
-
#reset_counters(*counters) ⇒ 객체
.count() 메서드를 사용하여 지정된 카운터를 재설정합니다. db에서 쿼리합니다.
클래스 메서드 세부 정보
.정의_콜백!(association) ⇒ 클래스
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
카운터 캐시 필드 업데이트를 담당하는 콜백을 추가합니다.
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에서 쿼리합니다. 이 메서드는 카운터가 손상되었거나 새 카운터가 컬렉션에 추가된 경우에 유용합니다.
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 |