diff options
author | Alexis Bernard <alexis@obloh.com> | 2012-10-30 15:54:16 +0100 |
---|---|---|
committer | Alexis Bernard <alexis@obloh.com> | 2012-11-08 17:52:54 +0100 |
commit | 16d98b2a41dec3619b9bd48b6b534406d9d07ef4 (patch) | |
tree | 9adbd54d6c0492703cb438a93326971e6382bc6d /activerecord | |
parent | 7031e365d6a8c00b62354f4abe8dff4802b38adf (diff) | |
download | rails-16d98b2a41dec3619b9bd48b6b534406d9d07ef4.tar.gz rails-16d98b2a41dec3619b9bd48b6b534406d9d07ef4.tar.bz2 rails-16d98b2a41dec3619b9bd48b6b534406d9d07ef4.zip |
Fix find_in_batches against string IDs when start option is not specified.
Conflicts:
activerecord/CHANGELOG.md
activerecord/lib/active_record/relation/batches.rb
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/relation/batches.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/batches_test.rb | 9 |
3 files changed, 15 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 3e071cfa01..483370de03 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 3.2.9 (unreleased) +* Fix `find_in_batches` crashing when IDs are strings and start option is not specified. + + *Alexis Bernard* + * Fix issue with collection associations calling first(n)/last(n) and attempting to set the inverse association when `:inverse_of` was used. Fixes #8087. diff --git a/activerecord/lib/active_record/relation/batches.rb b/activerecord/lib/active_record/relation/batches.rb index e7d916f2da..14701f668c 100644 --- a/activerecord/lib/active_record/relation/batches.rb +++ b/activerecord/lib/active_record/relation/batches.rb @@ -59,11 +59,11 @@ module ActiveRecord relation = apply_finder_options(finder_options) end - start = options.delete(:start) || 0 + start = options.delete(:start) batch_size = options.delete(:batch_size) || 1000 relation = relation.reorder(batch_order).limit(batch_size) - records = relation.where(table[primary_key].gteq(start)).all + records = start ? relation.where(table[primary_key].gteq(start)).to_a : relation.to_a while records.any? records_size = records.size diff --git a/activerecord/test/cases/batches_test.rb b/activerecord/test/cases/batches_test.rb index 16a93d97c6..ad2a749ab4 100644 --- a/activerecord/test/cases/batches_test.rb +++ b/activerecord/test/cases/batches_test.rb @@ -148,4 +148,13 @@ class EachTest < ActiveRecord::TestCase assert_equal nick_order_subscribers[1..-1].map(&:id), subscribers.map(&:id) end + + def test_find_in_batches_should_use_any_column_as_primary_key_when_start_is_not_specified + Subscriber.count('nick') # preheat arel's table cache + assert_queries(Subscriber.count + 1) do + Subscriber.find_each(:batch_size => 1) do |subscriber| + assert_kind_of Subscriber, subscriber + end + end + end end |