提交 5e86ee11 编写于 作者: R Ryuta Kamizono

Refactor `attributes_for_{create,update}` to avoid an extra allocation

Use `delete_if` instead of `reject` to avoid an extra allocation.
上级 56ca81a9
......@@ -459,7 +459,8 @@ def attributes_with_values(attribute_names)
# 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 @@ def attributes_for_update(attribute_names)
# 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
......
......@@ -718,7 +718,6 @@ def create_or_update(*args, &block)
# Updates the associated record with values matching those of the instance attributes.
# Returns the number of affected rows.
def _update_record(attribute_names = self.attribute_names)
attribute_names &= self.class.column_names
attribute_names = attributes_for_update(attribute_names)
if attribute_names.empty?
......@@ -737,7 +736,6 @@ def _update_record(attribute_names = self.attribute_names)
# Creates a record with values matching those of the instance attributes
# and returns its id.
def _create_record(attribute_names = self.attribute_names)
attribute_names &= self.class.column_names
attribute_names = attributes_for_create(attribute_names)
new_id = self.class._insert_record(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册