Skip to content

Commit

Permalink
Define to_ary on ActiveRecord::Base to return nil. Improve performanc…
Browse files Browse the repository at this point in the history
…e of Array#flatten under 1.9, see comment for details.
  • Loading branch information
jonleighton committed Jun 29, 2011
1 parent 9378d7e commit e9fa602
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions activerecord/lib/active_record/base.rb
Expand Up @@ -1900,6 +1900,18 @@ def clone_attribute_value(reader_method, attribute_name)

private

# Under Ruby 1.9, Array#flatten will call #to_ary (recursively) on each of the elements
# of the array, and then rescues from the possible NoMethodError. If those elements are
# ActiveRecord::Base's, then this triggers the various method_missing's that we have,
# which significantly impacts upon performance.
#
# So we can avoid the method_missing hit by explicitly defining #to_ary as nil here.
#
# See also http://tenderlovemaking.com/2011/06/28/til-its-ok-to-return-nil-from-to_ary/
def to_ary # :nodoc:
nil
end

def set_serialized_attributes
sattrs = self.class.serialized_attributes

Expand Down

0 comments on commit e9fa602

Please sign in to comment.