Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Restore behavior of Active Record 3.2.3 scopes
A series of commits relating to preloading and scopes caused a regression.
Cloning the relation calls initialize_copy which resets a number of instance
variables to nil. Without this the scope thinks that it is already loaded
when it is called again.

Reverts the following commits:
13f1401
8491740
dffbb52

Fixes rails#6575, rails#6576 & rails#6577
  • Loading branch information
pixeltrix committed Jun 1, 2012
1 parent 4df9680 commit 7056079
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 31 deletions.
Expand Up @@ -77,7 +77,7 @@ def associated_records_by_owner
# Some databases impose a limit on the number of ids in a list (in Oracle it's 1000)
# Make several smaller queries if necessary or make one query if the adapter supports it
sliced = owner_keys.each_slice(model.connection.in_clause_length || owner_keys.size)
records = sliced.map { |slice| records_for(slice).to_a }.flatten
records = sliced.map { |slice| records_for(slice) }.flatten
end

# Each record may have multiple owners, and vice-versa
Expand All @@ -93,8 +93,7 @@ def associated_records_by_owner
end

def build_scope
scope = klass.unscoped
scope.default_scoped = true
scope = klass.scoped

scope = scope.where(process_conditions(options[:conditions]))
scope = scope.where(process_conditions(preload_options[:conditions]))
Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/scoping/named.rb
Expand Up @@ -34,7 +34,7 @@ def scoped(options = nil)
if current_scope
current_scope.clone
else
scope = relation
scope = relation.clone
scope.default_scoped = true
scope
end
Expand All @@ -48,7 +48,7 @@ def scope_attributes # :nodoc:
if current_scope
current_scope.scope_for_create
else
scope = relation
scope = relation.clone
scope.default_scoped = true
scope.scope_for_create
end
Expand Down
24 changes: 0 additions & 24 deletions activerecord/test/cases/associations/eager_test.rb
Expand Up @@ -1095,28 +1095,4 @@ def test_join_eager_with_nil_order_should_generate_valid_sql
Post.includes(:comments).order(nil).where(:comments => {:body => "Thank you for the welcome"}).first
end
end

def test_deep_including_through_habtm
posts = Post.find(:all, :include => {:categories => :categorizations}, :order => "posts.id, categories.id")
assert_no_queries { assert_equal 2, posts[0].categories[0].categorizations.length }
assert_no_queries { assert_equal 1, posts[0].categories[1].categorizations.length }
assert_no_queries { assert_equal 2, posts[1].categories[0].categorizations.length }
end

test "scoping with a circular preload" do
assert_equal Comment.find(1), Comment.preload(:post => :comments).scoping { Comment.find(1) }
end

test "circular preload does not modify unscoped" do
expected = FirstPost.unscoped.find(2)
FirstPost.preload(:comments => :first_post).find(1)
assert_equal expected, FirstPost.unscoped.find(2)
end

test "preload ignores the scoping" do
assert_equal(
Comment.find(1).post,
Post.where('1 = 0').scoping { Comment.preload(:post).find(1).post }
)
end
end
2 changes: 0 additions & 2 deletions activerecord/test/models/comment.rb
Expand Up @@ -11,8 +11,6 @@ class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true
has_many :ratings

belongs_to :first_post, :foreign_key => :post_id

has_many :children, :class_name => 'Comment', :foreign_key => :parent_id
belongs_to :parent, :class_name => 'Comment', :counter_cache => :children_count

Expand Down

0 comments on commit 7056079

Please sign in to comment.