aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Vanderburg <glv@vanderburg.org>2011-01-28 18:16:44 -0600
committerSantiago Pastorino <santiago@wyeworks.com>2011-02-01 12:38:58 -0200
commit6bd9fac1e301d57765073e1f7a17e46972428205 (patch)
tree8514c120608bbace9eb9230a064a0c1eebc6e1a7
parent817e37013610c8e8866197594d5e408b4d5daec5 (diff)
downloadrails-6bd9fac1e301d57765073e1f7a17e46972428205.tar.gz
rails-6bd9fac1e301d57765073e1f7a17e46972428205.tar.bz2
rails-6bd9fac1e301d57765073e1f7a17e46972428205.zip
Propagate association extensions to scopes called on the association.
Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
-rw-r--r--activerecord/lib/active_record/associations/association_proxy.rb3
-rw-r--r--activerecord/test/cases/associations/extension_test.rb5
-rw-r--r--activerecord/test/models/comment.rb1
3 files changed, 9 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/associations/association_proxy.rb b/activerecord/lib/active_record/associations/association_proxy.rb
index 8e16246e80..84f868ec43 100644
--- a/activerecord/lib/active_record/associations/association_proxy.rb
+++ b/activerecord/lib/active_record/associations/association_proxy.rb
@@ -188,6 +188,9 @@ module ActiveRecord
if select = select_value
scope = scope.select(select)
end
+ if Relation === scope
+ scope = scope.extending(*Array.wrap(@reflection.options[:extend]))
+ end
scope.where(construct_owner_conditions)
end
diff --git a/activerecord/test/cases/associations/extension_test.rb b/activerecord/test/cases/associations/extension_test.rb
index efaab8569e..e1f5b16eca 100644
--- a/activerecord/test/cases/associations/extension_test.rb
+++ b/activerecord/test/cases/associations/extension_test.rb
@@ -29,6 +29,11 @@ class AssociationsExtensionsTest < ActiveRecord::TestCase
assert_equal projects(:action_controller), developers(:david).projects_extended_by_name_and_block.find_most_recent
assert_equal projects(:active_record), developers(:david).projects_extended_by_name_and_block.find_least_recent
end
+
+ def test_extension_with_scopes
+ assert_equal comments(:greetings), posts(:welcome).comments.offset(1).find_most_recent
+ assert_equal comments(:greetings), posts(:welcome).comments.not_again.find_most_recent
+ end
def test_marshalling_extensions
david = developers(:david)
diff --git a/activerecord/test/models/comment.rb b/activerecord/test/models/comment.rb
index a9aa0afced..ff533717cc 100644
--- a/activerecord/test/models/comment.rb
+++ b/activerecord/test/models/comment.rb
@@ -1,6 +1,7 @@
class Comment < ActiveRecord::Base
scope :limit_by, lambda {|l| limit(l) }
scope :containing_the_letter_e, :conditions => "comments.body LIKE '%e%'"
+ scope :not_again, where("comments.body NOT LIKE '%again%'")
scope :for_first_post, :conditions => { :post_id => 1 }
scope :for_first_author,
:joins => :post,