diff options
author | Glenn Vanderburg <glv@vanderburg.org> | 2011-01-28 18:16:44 -0600 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2011-02-01 12:38:58 -0200 |
commit | 6bd9fac1e301d57765073e1f7a17e46972428205 (patch) | |
tree | 8514c120608bbace9eb9230a064a0c1eebc6e1a7 /activerecord | |
parent | 817e37013610c8e8866197594d5e408b4d5daec5 (diff) | |
download | rails-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>
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/associations/association_proxy.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/associations/extension_test.rb | 5 | ||||
-rw-r--r-- | activerecord/test/models/comment.rb | 1 |
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, |