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.

Reply via email to