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

Use arel predicates instead of strings wherever possible when merging relations

上级 f1acf1cc
......@@ -18,19 +18,18 @@ def initialize(klass, relation)
def merge(r)
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.
joins(r.relation.joins(r.relation)).
group(r.send(:group_clauses).join(', ')).
order(r.send(:order_clauses).join(', ')).
limit(r.taken).
offset(r.skipped).
select(r.send(:select_clauses).join(', ')).
eager_load(r.eager_load_associations).
preload(r.preload_associations).
from(r.send(:sources).present? ? r.send(:from_clauses) : nil)
joins(arel.joins(arel)).
group(arel.groupings).
order(arel.send(:order_clauses).join(', ')).
limit(arel.taken).
offset(arel.skipped).
select(arel.send(:select_clauses)).
from(arel.sources)
end
merged_wheres = @relation.wheres
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册