aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-06-14 13:17:42 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-06-14 13:17:42 -0700
commitf7114754b12f27a953a8e511128b394a4c2e85e5 (patch)
tree01ad5f42bfa7494d19341312fcf996ee1df0d2ff /activerecord/lib/active_record/relation
parent067e1505d4e054df566e065f4faf11ee4b430a3d (diff)
parente720b50fb1ff841970b2f1198996144c35b48461 (diff)
downloadrails-f7114754b12f27a953a8e511128b394a4c2e85e5.tar.gz
rails-f7114754b12f27a953a8e511128b394a4c2e85e5.tar.bz2
rails-f7114754b12f27a953a8e511128b394a4c2e85e5.zip
Merge pull request #10898 from dmitry/find_first_refactor_duplication
Refactored ActiveRecord `first` method to get rid of duplication.
Diffstat (limited to 'activerecord/lib/active_record/relation')
-rw-r--r--activerecord/lib/active_record/relation/finder_methods.rb21
1 files changed, 10 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb
index 1550d702a6..3ea3c33fcc 100644
--- a/activerecord/lib/active_record/relation/finder_methods.rb
+++ b/activerecord/lib/active_record/relation/finder_methods.rb
@@ -124,11 +124,7 @@ module ActiveRecord
#
def first(limit = nil)
if limit
- if order_values.empty? && primary_key
- order(arel_table[primary_key].asc).limit(limit).to_a
- else
- limit(limit).to_a
- end
+ find_first_with_limit(order_values, limit)
else
find_first
end
@@ -358,12 +354,15 @@ module ActiveRecord
if loaded?
@records.first
else
- @first ||=
- if with_default_scope.order_values.empty? && primary_key
- order(arel_table[primary_key].asc).limit(1).to_a.first
- else
- limit(1).to_a.first
- end
+ @first ||= find_first_with_limit(with_default_scope.order_values, 1).first
+ end
+ end
+
+ def find_first_with_limit(order_values, limit)
+ if order_values.empty? && primary_key
+ order(arel_table[primary_key].asc).limit(limit).to_a
+ else
+ limit(limit).to_a
end
end