diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb index da4eeb38442076fde8827985c1784b89a9da04f7..124bf65d3ae213f257e99ed52628c19942d1bbf4 100644 --- a/activerecord/test/cases/associations/eager_test.rb +++ b/activerecord/test/cases/associations/eager_test.rb @@ -980,6 +980,18 @@ def test_eager_loading_with_conditions_on_joined_table_preloads assert_equal posts(:welcome, :thinking), posts end + def test_preload_has_many_with_association_condition_and_default_scope + post = Post.create!(:title => 'Beaches', :body => "I like beaches!") + Reader.create! :person => people(:david), :post => post + LazyReader.create! :person => people(:susan), :post => post + + assert_equal 1, post.lazy_readers.to_a.size + assert_equal 2, post.lazy_readers_skimmers_or_not.to_a.size + + post_with_readers = Post.includes(:lazy_readers_skimmers_or_not).find(post.id) + assert_equal 2, post_with_readers.lazy_readers_skimmers_or_not.to_a.size + end + def test_eager_loading_with_conditions_on_string_joined_table_preloads posts = assert_queries(2) do Post.all.merge!(:select => 'distinct posts.*', :includes => :author, :joins => "INNER JOIN comments on comments.post_id = posts.id", :where => "comments.body like 'Thank you%'", :order => 'posts.id').to_a diff --git a/activerecord/test/models/post.rb b/activerecord/test/models/post.rb index 9c5b7310ff423328536c7c00d9693dd526fe337a..c995f59a1526fdc6a94ba9e9b313f658b702c693 100644 --- a/activerecord/test/models/post.rb +++ b/activerecord/test/models/post.rb @@ -119,6 +119,9 @@ def add_joins_and_select has_many :skimmers, -> { where :skimmer => true }, :class_name => 'Reader' has_many :impatient_people, :through => :skimmers, :source => :person + has_many :lazy_readers + has_many :lazy_readers_skimmers_or_not, -> { where(skimmer: [ true, false ]) }, :class_name => 'LazyReader' + def self.top(limit) ranked_by_comments.limit_by(limit) end diff --git a/activerecord/test/models/reader.rb b/activerecord/test/models/reader.rb index 59005ac6043eda4f28b53fd0ffef59a26f5063cf..f5b6079bd2db2877cc3c0e64f1e2697332ef6b27 100644 --- a/activerecord/test/models/reader.rb +++ b/activerecord/test/models/reader.rb @@ -12,3 +12,11 @@ class SecureReader < ActiveRecord::Base attr_accessible nil end + +class LazyReader < ActiveRecord::Base + self.table_name = "readers" + default_scope -> { where(skimmer: true) } + + belongs_to :post + belongs_to :person +end