method
merge_multi_values
v4.1.8 -
Show latest stable
- Class:
ActiveRecord::Relation::Merger
merge_multi_values()private
No documentation available.
# File activerecord/lib/active_record/relation/merger.rb, line 109
def merge_multi_values
lhs_wheres = relation.where_values
rhs_wheres = values[:where] || []
lhs_binds = relation.bind_values
rhs_binds = values[:bind] || []
removed, kept = partition_overwrites(lhs_wheres, rhs_wheres)
where_values = kept + rhs_wheres
bind_values = filter_binds(lhs_binds, removed) + rhs_binds
conn = relation.klass.connection
bv_index = 0
where_values.map! do |node|
if Arel::Nodes::Equality === node && Arel::Nodes::BindParam === node.right
substitute = conn.substitute_at(bind_values[bv_index].first, bv_index)
bv_index += 1
Arel::Nodes::Equality.new(node.left, substitute)
else
node
end
end
relation.where_values = where_values
relation.bind_values = bind_values
if values[:reordering]
# override any order specified in the original relation
relation.reorder! values[:order]
elsif values[:order]
# merge in order_values from relation
relation.order! values[:order]
end
relation.extend(*values[:extending]) unless values[:extending].blank?
end