• S
    Correct the behavior of virtual attributes on models loaded from the db · f0ddf87e
    Sean Griffin 提交于
    Previously we had primarily tested the behavior of these attributes by
    calling `.new`, allowing this to slip through the cracks. There were a
    few ways in which they were behaving incorrectly.
    
    The biggest issue was that attempting to read the attribute would
    through a `MissingAttribute` error. We've corrected this by returning
    the default value when the attribute isn't backed by a database column.
    This is super special cased, but I don't see a way to avoid this
    conditional. I had considered handling this higher up in
    `define_default_attribute`, but we don't have the relevant information
    there as users can provide new defaults for database columns as well.
    
    Once I corrected this, I had noticed that the attributes were always
    being marked as changed. This is because the behavior of
    `define_default_attribute` was treating them as assigned from
    `Attribute::Null`.
    
    Finally, with our new implementation, `LazyAttributeHash` could no
    longer be marshalled, as it holds onto a proc. This has been corrected
    as well. I've not handled YAML in that class, as we do additional work
    higher up to avoid YAML dumping it at all.
    
    Fixes #25787
    Close #25841
    f0ddf87e
builder.rb 2.9 KB