diff options
author | Miguel Grazziotin <miguelgraz@gmail.com> | 2015-06-19 16:30:16 -0300 |
---|---|---|
committer | Miguel Grazziotin <miguelgraz@gmail.com> | 2015-06-19 16:30:16 -0300 |
commit | 07cdbb12b35e82c17e2103d38e90b26879e792af (patch) | |
tree | 5b710ec04ea4b9617c32eef993e9d65150f1a73d /activerecord/lib/active_record/relation/finder_methods.rb | |
parent | 2eb6b9dd0ba5049ee3a94f2f7ec7aa2fadd69dfc (diff) | |
download | rails-07cdbb12b35e82c17e2103d38e90b26879e792af.tar.gz rails-07cdbb12b35e82c17e2103d38e90b26879e792af.tar.bz2 rails-07cdbb12b35e82c17e2103d38e90b26879e792af.zip |
WIP: fixing the limit bug and introducing new tests (failing for now) on .find(array) with offset
Diffstat (limited to 'activerecord/lib/active_record/relation/finder_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index a0e1420055..18324cf3c6 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -444,8 +444,6 @@ module ActiveRecord end def find_some(ids) - result = where(primary_key => ids).to_a - expected_size = if limit_value && ids.size > limit_value limit_value @@ -456,12 +454,16 @@ module ActiveRecord # 11 ids with limit 3, offset 9 should give 2 results. if offset_value && (ids.size - offset_value < expected_size) expected_size = ids.size - offset_value + else + ids = ids.first(expected_size) unless self.values[:order] end + result = where(primary_key => ids).to_a + if result.size == expected_size return result if self.values[:order] records_by_id = result.index_by(&:id) - ids.first(expected_size).collect { |id| records_by_id[id.to_i] } + ids.collect { |id| records_by_id[id.to_i] }.compact else raise_record_not_found_exception!(ids, result.size, expected_size) end |