aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/aggregations.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-11-18 15:19:15 -0800
committerSean Griffin <sean@thoughtbot.com>2014-11-18 15:20:19 -0800
commit08576b94ad4f19dfc368619d7751e211d23dcad8 (patch)
treea8be0f668e65f0c90a79cd3031984c507225019c /activerecord/lib/active_record/aggregations.rb
parent78e7a0d3b7eaafe1ad0a45e3e355e1123cae3f8b (diff)
downloadrails-08576b94ad4f19dfc368619d7751e211d23dcad8.tar.gz
rails-08576b94ad4f19dfc368619d7751e211d23dcad8.tar.bz2
rails-08576b94ad4f19dfc368619d7751e211d23dcad8.zip
Improve the performance of reading attributes
We added a comparison to "id", and call to `self.class.primary_key` a *lot*. We also have performance hits from `&block` all over the place. We skip the check in a new method, in order to avoid breaking the behavior of `read_attribute`
Diffstat (limited to 'activerecord/lib/active_record/aggregations.rb')
-rw-r--r--activerecord/lib/active_record/aggregations.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/aggregations.rb b/activerecord/lib/active_record/aggregations.rb
index e576ec4d40..1040e6e3bb 100644
--- a/activerecord/lib/active_record/aggregations.rb
+++ b/activerecord/lib/active_record/aggregations.rb
@@ -230,8 +230,8 @@ module ActiveRecord
private
def reader_method(name, class_name, mapping, allow_nil, constructor)
define_method(name) do
- if @aggregation_cache[name].nil? && (!allow_nil || mapping.any? {|key, _| !read_attribute(key).nil? })
- attrs = mapping.collect {|key, _| read_attribute(key)}
+ if @aggregation_cache[name].nil? && (!allow_nil || mapping.any? {|key, _| !_read_attribute(key).nil? })
+ attrs = mapping.collect {|key, _| _read_attribute(key)}
object = constructor.respond_to?(:call) ?
constructor.call(*attrs) :
class_name.constantize.send(constructor, *attrs)