提交 32b48bf4 编写于 作者: P Pratik Naik

Use arel predicates instead of strings wherever possible when merging relations

上级 f1acf1cc
...@@ -18,19 +18,18 @@ def initialize(klass, relation) ...@@ -18,19 +18,18 @@ def initialize(klass, relation)
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册