views:

43

answers:

2

Hi,

I have a simple "Log" model, that records the fact of calling controller's action.

Entries of this "log" record are supposed to be created once and never altered. Also, I will have many of these records in the database.

So, there is no need for "updated_at" column (don't need to waste the memory on HDD).

How can I tell to Rails to leave only "created_at" column and not to use "updated_at"?

Is there any way to make the "Log" model read only?

+2  A: 

I presume you have the updated_at column because you used the t.timestamps shorthand in your model's migration file. If you don't want the column then you can specify what you do want explicitly:

class Log < ActiveRecord::Migration
  def self.up 
    create_table :logs do |t|
      t.column  :foo,        :string
      t.column :created_at, :datetime
    end
  end

  def self.down 
    drop_table :logs
  end
end
John Topley
+3  A: 

You can make the model readonly by adding a readonly? method to the model.

class Log < ActiveRecord::Base
    # Prevent modification of existing records
    def readonly?
       !new_record?
    end

    # Prevent objects from being destroyed
    def before_destroy
      raise ActiveRecord::ReadOnlyRecord
    end

end

The example above was adopted from here.

If you don't need the updated_at column, just remove (or don't add it) it from your database. Rails won't update what's not there.

Daniel Abrahamsson
Cool, thanks. One more thing - how can i prevent destroying the record ? This trick with "readonly?" does't works for that ...
AntonAL
I updated the example. Got it from the same link.
Daniel Abrahamsson