Module: SecondLevelCache::ActiveRecord::Associations::HasOneAssociation

Extended by:
ActiveSupport::Concern
Defined in:
lib/second_level_cache/active_record/has_one_association.rb

Instance Method Summary collapse

Instance Method Details

#find_target_with_second_level_cacheObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/second_level_cache/active_record/has_one_association.rb', line 13

def find_target_with_second_level_cache
  return find_target_without_second_level_cache unless klass.second_level_cache_enabled?

  return find_target_without_second_level_cache if reflection.options[:through]
  # TODO: implement cache with has_one through
  if reflection.options[:as]
    cache_record = klass.fetch_by_uniq_keys({reflection.foreign_key => owner[reflection.active_record_primary_key], reflection.type => owner.class.base_class.name})
  elsif reflection.scope
    cache_record = klass.fetch_by_uniq_keys(create_scope)
  else
    cache_record = klass.fetch_by_uniq_key(owner[reflection.active_record_primary_key], reflection.foreign_key)
  end
  return cache_record.tap{|record| set_inverse_instance(record)} if cache_record

  record = find_target_without_second_level_cache

  record.tap do |r|
    set_inverse_instance(r)
    r.write_second_level_cache
  end if record
end