123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::PredicateBuilder::AssociationQueryValue

Do not use. This class is for internal use only.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(reflection, value) ⇒ AssociationQueryValue

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 6

def initialize(reflection, value)
  @reflection = reflection
  @value = value
end

Instance Attribute Details

#polymorphic_clause?Boolean (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 52

def polymorphic_clause?
  primary_type && !value.where_values_hash.has_key?(primary_type)
end

#reflection (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 20

attr_reader :reflection, :value

#select_clause?Boolean (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 48

def select_clause?
  value.select_values.empty?
end

#value (readonly, private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 20

attr_reader :reflection, :value

Instance Method Details

#convert_to_id(value) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 56

def convert_to_id(value)
  if primary_key.is_a?(Array)
    primary_key.map do |attribute|
      next nil if value.nil?

      if attribute == "id"
        value.id_value
      else
        value.public_send(attribute)
      end
    end
  elsif value.respond_to?(primary_key)
    value.public_send(primary_key)
  else
    value
  end
end

#ids (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 22

def ids
  case value
  when Relation
    relation = value
    relation = relation.select(primary_key) if select_clause?
    relation = relation.where(primary_type => polymorphic_name) if polymorphic_clause?
    relation
  when Array
    value.map { |v| convert_to_id(v) }
  else
    [convert_to_id(value)]
  end
end

#polymorphic_name (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 44

def polymorphic_name
  reflection.polymorphic_name
end

#primary_key (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 36

def primary_key
  reflection.join_primary_key
end

#primary_type (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 40

def primary_type
  reflection.join_primary_type
end

#queries

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb', line 11

def queries
  key = ActiveRecord::Key.for(reflection.join_foreign_key)
  id_list = ids
  id_list = id_list.pluck(primary_key) if key.composite? && id_list.is_a?(Relation)

  key.where_clauses(id_list)
end