Sha256: cf0872138a59bebe1272d6fb24b783eb3b746af45bc78c53aaa64e3e7a51c681

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

require 'set'

module ActiveRecord
  module Associations
    class AssociationProxy
      protected
        def set_belongs_to_association_for(record)
          reset_association_cache(record) if @reflection.options[:cached]

          if @reflection.options[:as]
            record["#{@reflection.options[:as]}_id"]   = @owner.id unless @owner.new_record?
            record["#{@reflection.options[:as]}_type"] = @owner.class.base_class.name.to_s
          else
            record[@reflection.primary_key_name] = @owner.id unless @owner.new_record?
          end
        end

      private
        def reset_association_cache(record)
          current_owner = current_owner(record)
          return unless current_owner
          current_owner.send(:cache_delete, @reflection)
        end

        def current_owner(record)
          current_owner_id, current_owner_type = if @reflection.options[:as]
            [ record["#{@reflection.options[:as]}_id"],
               record["#{@reflection.options[:as]}_type"] ]
          else
            [ record[@reflection.primary_key_name],
                @owner.class.base_class.name.to_s ]
          end

          return unless current_owner_id
          current_owner_type.constantize.find(current_owner_id)
        end
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
jodosha-cached-models-0.0.3 lib/activerecord/lib/active_record/associations/association_proxy.rb
cached-models-0.0.2 lib/activerecord/lib/active_record/associations/association_proxy.rb
cached-models-0.0.3 lib/activerecord/lib/active_record/associations/association_proxy.rb