diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-08-31 00:06:12 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2018-08-31 00:06:12 +0900 |
commit | 5e86ee1195eaf2242a5fdd35fce3790260e5e826 (patch) | |
tree | 56a10de6a669ed61c0806c2338776a71a6c0819a /activerecord/lib/active_record/attribute_methods.rb | |
parent | 56ca81a9111d1a47349299e2b973160885bad767 (diff) | |
download | rails-5e86ee1195eaf2242a5fdd35fce3790260e5e826.tar.gz rails-5e86ee1195eaf2242a5fdd35fce3790260e5e826.tar.bz2 rails-5e86ee1195eaf2242a5fdd35fce3790260e5e826.zip |
Refactor `attributes_for_{create,update}` to avoid an extra allocation
Use `delete_if` instead of `reject` to avoid an extra allocation.
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/attribute_methods.rb | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/attribute_methods.rb b/activerecord/lib/active_record/attribute_methods.rb index f657a74595..701f19a6ae 100644 --- a/activerecord/lib/active_record/attribute_methods.rb +++ b/activerecord/lib/active_record/attribute_methods.rb @@ -459,7 +459,8 @@ module ActiveRecord # Filters the primary keys and readonly attributes from the attribute names. def attributes_for_update(attribute_names) - attribute_names.reject do |name| + attribute_names &= self.class.column_names + attribute_names.delete_if do |name| readonly_attribute?(name) end end @@ -467,7 +468,8 @@ module ActiveRecord # Filters out the primary keys, from the attribute names, when the primary # key is to be generated (e.g. the id attribute has no value). def attributes_for_create(attribute_names) - attribute_names.reject do |name| + attribute_names &= self.class.column_names + attribute_names.delete_if do |name| pk_attribute?(name) && id.nil? end end |