Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Define to_ary on ActiveRecord::Base to return nil. Improve performanc…

…e of Array#flatten under 1.9, see comment for details.
  • Loading branch information...
commit e9fa602e1c70a5c8e1644b218d5784e7c195eb35 1 parent 9378d7e
Jon Leighton jonleighton authored
Showing with 12 additions and 0 deletions.
  1. +12 −0 activerecord/lib/active_record/base.rb
12 activerecord/lib/active_record/base.rb
View
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.