mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Use arel predicates instead of strings wherever possible when merging relations
This commit is contained in:
parent
f1acf1cc74
commit
32b48bf419
1 changed files with 10 additions and 11 deletions
|
@ -18,19 +18,18 @@ module ActiveRecord
|
||||||
def merge(r)
|
def merge(r)
|
||||||
raise ArgumentError, "Cannot merge a #{r.klass.name} relation with #{@klass.name} relation" if r.klass != @klass
|
raise ArgumentError, "Cannot merge a #{r.klass.name} relation with #{@klass.name} relation" if r.klass != @klass
|
||||||
|
|
||||||
merged_relation = spawn(table)
|
merged_relation = spawn(table).eager_load(r.eager_load_associations).preload(r.preload_associations)
|
||||||
|
merged_relation.readonly = r.readonly
|
||||||
|
|
||||||
[self, r].each do |r|
|
[self.relation, r.relation].each do |arel|
|
||||||
merged_relation = merged_relation.
|
merged_relation = merged_relation.
|
||||||
joins(r.relation.joins(r.relation)).
|
joins(arel.joins(arel)).
|
||||||
group(r.send(:group_clauses).join(', ')).
|
group(arel.groupings).
|
||||||
order(r.send(:order_clauses).join(', ')).
|
order(arel.send(:order_clauses).join(', ')).
|
||||||
limit(r.taken).
|
limit(arel.taken).
|
||||||
offset(r.skipped).
|
offset(arel.skipped).
|
||||||
select(r.send(:select_clauses).join(', ')).
|
select(arel.send(:select_clauses)).
|
||||||
eager_load(r.eager_load_associations).
|
from(arel.sources)
|
||||||
preload(r.preload_associations).
|
|
||||||
from(r.send(:sources).present? ? r.send(:from_clauses) : nil)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
merged_wheres = @relation.wheres
|
merged_wheres = @relation.wheres
|
||||||
|
|
Loading…
Reference in a new issue