diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2009-12-28 01:08:34 +0530 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2009-12-28 01:08:34 +0530 |
commit | a8b10a2a8d6f8d861453803264b9ef1b0cadbc6b (patch) | |
tree | acc2d2ad06e34ccf11fc886ef4774210ec85d7aa /activerecord/lib/active_record/relation.rb | |
parent | 08312e9958b84de9aef07ba157eed04750567da4 (diff) | |
download | rails-a8b10a2a8d6f8d861453803264b9ef1b0cadbc6b.tar.gz rails-a8b10a2a8d6f8d861453803264b9ef1b0cadbc6b.tar.bz2 rails-a8b10a2a8d6f8d861453803264b9ef1b0cadbc6b.zip |
Add relation#merge to merge two relations
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index d1f4dc2101..967e429fc3 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -12,6 +12,18 @@ module ActiveRecord @loaded = false end + def merge(r) + joins(r.relation.joins(r.relation)). + group(r.send(:group_clauses).join(', ')). + order(r.send(:order_clauses).join(', ')). + where(r.send(:where_clause)). + limit(r.taken). + offset(r.skipped). + select(r.send(:select_clauses).join(', ')) + end + + alias :& :merge + def preload(*associations) create_new_relation(@relation, @readonly, @associations_to_preload + Array.wrap(associations)) end @@ -25,7 +37,7 @@ module ActiveRecord end def select(selects) - create_new_relation(@relation.project(selects)) + selects.present? ? create_new_relation(@relation.project(selects)) : create_new_relation end # TODO : This is temporary. We need .from in Arel. @@ -37,11 +49,11 @@ module ActiveRecord end def group(groups) - create_new_relation(@relation.group(groups)) + groups.present? ? create_new_relation(@relation.group(groups)) : create_new_relation end def order(orders) - create_new_relation(@relation.order(orders)) + orders.present? ? create_new_relation(@relation.order(orders)) : create_new_relation end def reverse_order @@ -57,11 +69,11 @@ module ActiveRecord end def limit(limits) - create_new_relation(@relation.take(limits)) + limits.present? ? create_new_relation(@relation.take(limits)) : create_new_relation end def offset(offsets) - create_new_relation(@relation.skip(offsets)) + offsets.present? ? create_new_relation(@relation.skip(offsets)) : create_new_relation end def on(join) |