Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Ensure association preloading properly merges default scope and assoc…

…iation conditions
  • Loading branch information...
commit 2d6d8a72a3e695d72f60c5683920a15028b0d535 1 parent e6e9e56
Pratik lifo authored
4 activerecord/lib/active_record/associations/preloader/association.rb
View
@@ -117,9 +117,7 @@ def process_conditions(conditions)
conditions = klass.send(:instance_eval, &conditions)
end
- if conditions
- klass.send(:sanitize_sql, conditions)
- end
+ conditions
end
end
end
12 activerecord/test/cases/associations/eager_test.rb
View
@@ -975,6 +975,18 @@ def test_preload_has_many_using_primary_key
end
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_include_has_many_using_primary_key
expected = Firm.find(1).clients_using_primary_key.sort_by(&:name)
# Oracle adapter truncates alias to 30 characters
4 activerecord/test/models/post.rb
View
@@ -108,6 +108,7 @@ def add_joins_and_select
has_many :readers
has_many :readers_with_person, :include => :person, :class_name => "Reader"
+
has_many :people, :through => :readers
has_many :single_people, :through => :readers
has_many :people_with_callbacks, :source=>:person, :through => :readers,
@@ -118,6 +119,9 @@ def add_joins_and_select
has_many :skimmers, :class_name => 'Reader', :conditions => { :skimmer => true }
has_many :impatient_people, :through => :skimmers, :source => :person
+ has_many :lazy_readers
+ has_many :lazy_readers_skimmers_or_not, :conditions => { :skimmer => [ true, false ] }, :class_name => 'LazyReader'
+
def self.top(limit)
ranked_by_comments.limit_by(limit)
end
8 activerecord/test/models/reader.rb
View
@@ -3,3 +3,11 @@ class Reader < ActiveRecord::Base
belongs_to :person, :inverse_of => :readers
belongs_to :single_person, :class_name => 'Person', :foreign_key => :person_id, :inverse_of => :reader
end
+
+class LazyReader < ActiveRecord::Base
+ set_table_name 'readers'
+ default_scope where(:skimmer => true)
+
+ belongs_to :post
+ belongs_to :person
+end
Please sign in to comment.
Something went wrong with that request. Please try again.