123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::PredicateBuilder::RelationHandler

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

Instance Method Summary

Instance Method Details

#call(attribute, value)

[ GitHub ]

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

def call(attribute, value)
  if value.eager_loading?
    value = value.send(:apply_join_dependency)
  end

  if value.select_values.empty?
    model = value.model
    if model.composite_primary_key?
      raise ArgumentError, "Cannot map composite primary key #{model.primary_key} to #{attribute.name}"
    else
      value = value.select(value.table[model.primary_key])
    end
  end

  query = value.arel
  if attribute.is_a?(ComparisonAttribute)
    query = query.clone
    query.projections = query.projections.map { |projection| comparison_projection(attribute, projection) }
  end

  attribute.in(query)
end

#comparison_projection(attribute, projection) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/predicate_builder/relation_handler.rb', line 30

def comparison_projection(attribute, projection)
  if projection.is_a?(Arel::Nodes::As)
    Arel::Nodes::As.new(attribute.comparison_expression(projection.left), projection.right)
  else
    attribute.comparison_expression(projection)
  end
end