Sha256: fb52c9ae8b32d1d59cf1fd7eb90f07d603087f568180f3a3aeb6328a4517df4b

Contents?: true

Size: 1.69 KB

Versions: 11

Compression:

Stored size: 1.69 KB

Contents

module ActiveRecord::Associations
  class HasManyForActiveModelAssociation < HasManyAssociation
    # remove conditions: owner.new_record?, foreign_key_present? 
    def find_target?
      !loaded? && klass
    end

    # no dependent action
    def null_scope?
      false
    end

    # not support counter_cache
    def empty?
      if loaded?
        size.zero?
      else
        @target.blank? && !scope.exists?
      end
    end

    # full replace simplely
    def replace(other_array)
      original_target = load_target.dup
      other_array.each { |val| raise_on_type_mismatch!(val) }
      target_ids = reflection.options[:target_ids]
      owner[target_ids] = other_array.map(&:id)

      old_records = original_target - other_array
      old_records.each do |record|
        @target.delete(record)
      end

      other_array.each do |record|
        if index = @target.index(record)
          @target[index] = record
        else
          @target << record
        end
      end
    end

    # no need transaction
    def concat(*records)
      load_target
      flatten_records = records.flatten
      flatten_records.each { |val| raise_on_type_mismatch!(val) }
      target_ids = reflection.options[:target_ids]
      owner[target_ids] ||= []
      owner[target_ids].concat(flatten_records.map(&:id))

      flatten_records.each do |record|
        if index = @target.index(record)
          @target[index] = record
        else
          @target << record
        end
      end

      target
    end

    private

    def get_records
      return scope.to_a if reflection.scope_chain.any?(&:any?)

      target_ids = reflection.options[:target_ids]
      klass.where(id: owner[target_ids]).to_a
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
eac_rails_utils-0.22.2 lib/active_record/associations/has_many_for_active_model_association.rb
eac_rails_utils-0.22.1 lib/active_record/associations/has_many_for_active_model_association.rb
eac_rails_utils-0.22.0 lib/active_record/associations/has_many_for_active_model_association.rb
eac_rails_utils-0.21.0 lib/active_record/associations/has_many_for_active_model_association.rb
eac_rails_utils-0.20.0 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.2.0 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.2.0.beta2 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.2.0.beta1 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.1.2 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.1.1 lib/active_record/associations/has_many_for_active_model_association.rb
activemodel-associations-0.1.0 lib/active_record/associations/has_many_for_active_model_association.rb