Skip to main content

ActiveRecord Read Only Model

·209 words·1 min· ·
General Blog Ruby Rails Ror Activerecord
Ariejan de Vroom
Author
Ariejan de Vroom
Jack of all Trades, Professional Software Craftsman

ActiveRecord is great in providing CRUD for your data models. In some cases, however, it’s necessary to prevent write access to these models. The data may be provided by an external source and should only be used as a reference in your application, for example.

I’m going to show you how you can easily mark a Model as read only all the time. In this example I have a Item model like this:

class Item < ActiveRecord::Base
end

ActiveRecord::Base provides two methods that may be of interest here:

def readonly!
  @readonly = true
end

def readonly?
  defined?(@readonly) && @readonly == true
end

The first method sets the record to read only. This is great, but we don’t want to set the read only property every time we load a model. The second, readonly?, return true if the object is read only or false if it isn’t.

So, if we return true on the readonly? method, our object is marked as read only. Great!

class Item < ActiveRecord::Base
  def readonly?
    true
  end
end

That is all! All Item objects are now marked as read only all the time. If you try to write to the model, you’ll receive an error.

item = Item.find(:first)
item.update_attributes(:name => 'Some item name')
=> ActiveRecord::RecordReadOnly

Related

RailsJobs.nl - Ruby on Rails Jobs in The Netherlands
·175 words·1 min
General Blog Ruby Ruby on Rails Rails Jobs RailsJobs.nl
Skinny Controllers and Overweight Models
·258 words·2 mins
Blog Ruby Rails Controllers Models
Zoek jij 'n uitdagende baan??
·210 words·1 min
General RubyOnRails Ruby Rails Baan Banen Rubyenrails