Module: Switchman::ActiveRecord::Reflection::AssociationScopeCache
- Defined in:
- lib/switchman/active_record/reflection.rb
Instance Method Summary collapse
-
#association_scope_cache(klass, owner) ⇒ Object
cache association scopes by shard.
- #initialize(*args) ⇒ Object
Instance Method Details
#association_scope_cache(klass, owner) ⇒ Object
cache association scopes by shard. this technically belongs on AssociationReflection, but we put it on ThroughReflection as well, instead of delegating to its internal HasManyAssociation, losing its proper klass
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/switchman/active_record/reflection.rb', line 31 def association_scope_cache(klass, owner, &) key = self key = [key, owner._read_attribute(@foreign_type)] if polymorphic? key = [key, shard(owner).id].flatten if ::Rails.version < "7.2" klass.cached_find_by_statement(key, &) else klass.with_connection do |connection| klass.cached_find_by_statement(connection, key, &) end end end |
#initialize(*args) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/switchman/active_record/reflection.rb', line 18 def initialize(*args) super # on ThroughReflection, these won't be initialized (cause it doesn't # inherit from AssociationReflection), so make sure they're # initialized here @association_scope_cache ||= {} @scope_lock ||= Mutex.new end |