lib/active_model/dirty.rb in activemodel-8.0.0.beta1 vs lib/active_model/dirty.rb in activemodel-8.0.0.rc1

- old
+ new

@@ -245,15 +245,21 @@ attribute_method_affix prefix: "clear_", suffix: "_change", parameters: false end def initialize_dup(other) # :nodoc: super - if self.class.respond_to?(:_default_attributes) - @attributes = self.class._default_attributes.map do |attr| - attr.with_value_from_user(@attributes.fetch_value(attr.name)) + @mutations_from_database = nil + end + + def init_attributes(other) # :nodoc: + attrs = super + if other.persisted? && self.class.respond_to?(:_default_attributes) + self.class._default_attributes.map do |attr| + attr.with_value_from_user(attrs.fetch_value(attr.name)) end + else + attrs end - @mutations_from_database = nil end def as_json(options = {}) # :nodoc: except = [*options[:except], "mutations_from_database", "mutations_before_last_save"] options = options.merge except: except