It works exactly as documented: "will be used to create a new record but update operations will ignore these fields."
If that isn't the behavior you want, you're probably better off using a different solution, rather than changing the intended behavior for everyone. Maybe override the attribute setter: def name=(val) raise ActiveRecord::ReadOnlyRecord.new("Name is readonly) if persisted? super end On Saturday, April 22, 2017 at 4:23:42 PM UTC-5, Chris Stadler wrote: > > Currently, updates to read-only attributes fail silently. For example: > > class ReadOnly < ActiveRecord::Base > attr_readonly :name > end > > record = ReadOnly.create(name: "original") > record.update(name: "changed") # true > record.reload.name # "original" > > > This behavior is highly unexpected to me because it provides no feedback > that the updates were not persisted, a significant exception to the normal > behavior of #update and #save. > > Raising an error whenever an update is attempted, or treating > attr_readonly as a validation both seem like good options to me. I've > attempted to implement the former (mostly because it was simpler) here: > https://github.com/CJStadler/rails/commit/3fe8a29429a3dade8877513db653851b7a43333d > . > > I realize this would be a breaking change and can't be undertaken lightly, > but the current behavior feels like a big "gotcha", and one that's > difficult to debug. > > Thanks! > Chris Stadler > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.