The semantics here are slightly different.
Replacing `record.save` with `record.save!` would solve that.

Alternatively, I think `first_or_initialize` and friends can take non-finder attributes somehow, which are only used in the “or initialize” case…? But I like the simpler approach you have… less AR voodoo.