class ActiveRecord::PredicateBuilder::AssociationQueryValue
:nodoc:
def convert_to_id(value)
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
def ids
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
def initialize(associated_table, value)
def initialize(associated_table, value) @associated_table = associated_table @value = value end
def polymorphic_clause?
def polymorphic_clause? primary_type && !value.where_values_hash.has_key?(primary_type) end
def polymorphic_name
def polymorphic_name associated_table.polymorphic_name_association end
def primary_key
def primary_key associated_table.join_primary_key end
def primary_type
def primary_type associated_table.join_primary_type end
def queries
def queries if associated_table.join_foreign_key.is_a?(Array) id_list = ids id_list = id_list.pluck(primary_key) if id_list.is_a?(Relation) id_list.map { |ids_set| associated_table.join_foreign_key.zip(ids_set).to_h } else [ associated_table.join_foreign_key => ids ] end end
def select_clause?
def select_clause? value.select_values.empty? end