class ActiveRecord::Relation::Merger
def merge_multi_values
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