提交 9066e340 编写于 作者: A Arun Agrawal

We need to recorder here. Need to drop the order from default scope.

Fixes #2832
上级 e865d125
...@@ -62,7 +62,7 @@ def find_in_batches(options = {}) ...@@ -62,7 +62,7 @@ def find_in_batches(options = {})
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 @@ def test_find_in_batches_should_not_use_records_after_yielding_them_in_case_orig ...@@ -113,7 +113,27 @@ def test_find_in_batches_should_not_use_records_after_yielding_them_in_case_orig
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 ...@@ -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
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册