Class: ActiveRecord::PredicateBuilder::PolymorphicArrayValue
Do not use. This class is for internal use only.
Class Method Summary
Instance Attribute Summary
Instance Method Summary
Constructor Details
.new(reflection, values) ⇒ PolymorphicArrayValue
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 6
def initialize(reflection, values)
@reflection = reflection
@values = values
end
Instance Attribute Details
#reflection
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 23
attr_reader :reflection, :values
#values
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 23
attr_reader :reflection, :values
Instance Method Details
#convert_to_id(value)
[ GitHub ]
#klass(value)
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 36
def klass(value)
if value.is_a?(Base)
value.class
elsif value.is_a?(Relation)
value.model
end
end
#primary_key(value)
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 32
def primary_key(value)
reflection.join_primary_key(klass(value))
end
#queries
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 11
def queries
return [ reflection.join_foreign_key => values ] if values.empty?
type_to_ids_mapping.map do |type, ids|
query = {}
query[reflection.join_foreign_type] = type if type
query[reflection.join_foreign_key] = ids
query
end
end
#type_to_ids_mapping
[ GitHub ]
# File 'activerecord/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb', line 25
def type_to_ids_mapping
default_hash = Hash.new { |hsh, key| hsh[key] = [] }
values.each_with_object(default_hash) do |value, hash|
hash[klass(value)&.polymorphic_name] << convert_to_id(value)
end
end