Class: ActiveRecord::PredicateBuilder::RelationHandler
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | activerecord/lib/active_record/relation/predicate_builder/relation_handler.rb |
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