提交 105e0304 编写于 作者: S Sean Griffin

Move conditionals about freezing closer to the definition of `freeze`

Reduces the number of places that care about the internals of how we
store and type cast attributes. We do not need to go through the
dup/freeze dance, as you couldn't have saved a frozen new record anyway,
and that is the only time we would end up modifying the frozen hash.
上级 287e926d
......@@ -546,5 +546,11 @@ def initialize_internals_callback
def init_attributes(attributes, options)
assign_attributes(attributes)
end
def thaw
if frozen?
@raw_attributes = @raw_attributes.dup
end
end
end
end
......@@ -347,7 +347,7 @@ def remember_transaction_record_state #:nodoc:
@_start_transaction_state[:destroyed] = @destroyed
end
@_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) + 1
@_start_transaction_state[:frozen?] = @raw_attributes.frozen?
@_start_transaction_state[:frozen?] = frozen?
end
# Clear the new record state and id of a record.
......@@ -367,8 +367,7 @@ def restore_transaction_record_state(force = false) #:nodoc:
transaction_level = (@_start_transaction_state[:level] || 0) - 1
if transaction_level < 1 || force
restore_state = @_start_transaction_state
was_frozen = restore_state[:frozen?]
@raw_attributes = @raw_attributes.dup if @raw_attributes.frozen?
thaw unless restore_state[:frozen?]
@new_record = restore_state[:new_record]
@destroyed = restore_state[:destroyed]
if restore_state.has_key?(:id)
......@@ -377,7 +376,6 @@ def restore_transaction_record_state(force = false) #:nodoc:
@raw_attributes.delete(self.class.primary_key)
@attributes.delete(self.class.primary_key)
end
@raw_attributes.freeze if was_frozen
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册