mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
We need to recorder here. Need to drop the order from default scope.
Fixes #2832
This commit is contained in:
parent
e865d12543
commit
9066e34025
3 changed files with 31 additions and 1 deletions
|
@ -62,7 +62,7 @@ module ActiveRecord
|
||||||
start = options.delete(:start).to_i
|
start = options.delete(:start).to_i
|
||||||
batch_size = options.delete(:batch_size) || 1000
|
batch_size = options.delete(:batch_size) || 1000
|
||||||
|
|
||||||
relation = relation.except(:order).order(batch_order).limit(batch_size)
|
relation = relation.reorder(batch_order).limit(batch_size)
|
||||||
records = relation.where(table[primary_key].gteq(start)).all
|
records = relation.where(table[primary_key].gteq(start)).all
|
||||||
|
|
||||||
while records.any?
|
while records.any?
|
||||||
|
|
|
@ -113,7 +113,27 @@ class EachTest < ActiveRecord::TestCase
|
||||||
batch.map! { not_a_post }
|
batch.map! { not_a_post }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_in_batches_should_ignore_the_order_default_scope
|
||||||
|
# First post is with title scope
|
||||||
|
first_post = PostWithDefaultScope.first
|
||||||
|
posts = []
|
||||||
|
PostWithDefaultScope.find_in_batches do |batch|
|
||||||
|
posts.concat(batch)
|
||||||
|
end
|
||||||
|
# posts.first will be ordered using id only. Title order scope should not apply here
|
||||||
|
assert_not_equal first_post, posts.first
|
||||||
|
assert_equal posts(:welcome), posts.first
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_in_batches_should_not_ignore_the_default_scope_if_it_is_other_then_order
|
||||||
|
special_posts_ids = SpecialPostWithDefaultScope.all.map(&:id)
|
||||||
|
posts = []
|
||||||
|
SpecialPostWithDefaultScope.find_in_batches do |batch|
|
||||||
|
posts.concat(batch)
|
||||||
|
end
|
||||||
|
assert_equal special_posts_ids, posts.map(&:id)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -172,3 +172,13 @@ class PostWithDefaultInclude < ActiveRecord::Base
|
||||||
default_scope includes(:comments)
|
default_scope includes(:comments)
|
||||||
has_many :comments, :foreign_key => :post_id
|
has_many :comments, :foreign_key => :post_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class PostWithDefaultScope < ActiveRecord::Base
|
||||||
|
self.table_name = 'posts'
|
||||||
|
default_scope :order => :title
|
||||||
|
end
|
||||||
|
|
||||||
|
class SpecialPostWithDefaultScope < ActiveRecord::Base
|
||||||
|
self.table_name = 'posts'
|
||||||
|
default_scope where(:id => [1, 5,6])
|
||||||
|
end
|
Loading…
Reference in a new issue