• S
    Persist user provided default values, even if unchanged · 2f9d8895
    Sean Griffin 提交于
    This is a usability change to fix a quirk from our definition of partial
    writes. By default, we only persist changed attributes. When creating a
    new record, this is assumed that the default values came from the
    database. However, if the user provided a default, it will not be
    persisted, since we didn't see it as "changed". Since this is a very
    specific case, I wanted to isolate it with the other quirks that come
    from user provided default values. The number of edge cases which are
    presenting themselves are starting to make me wonder if we should just
    remove the ability to assign a default, in favor of overriding
    `initialize`. For the time being, this is required for the attributes
    API to not have confusing behavior.
    
    We had to delete one test, since this actually changes the meaning of
    `.changed?` on Active Record models. It now specifically means
    `changed_from_database?`. While I think this will make the attributes
    API more ergonomic to use, it is a subtle change in definition (though
    not a backwards incompatible one). We should probably figure out the
    right place to document this. (Feel free to open a PR doing that if
    you're reading this).
    
    /cc @rafaelfranca @kirs @senny
    
    This is an alternate implementation of #19921.
    
    Close #19921.
    
    [Sean Griffin & Kir Shatrov]
    2f9d8895
dirty_test.rb 21.1 KB