2010-07-27 9 views
22

Tengo un modelo de "registro" simple, que registra el hecho de llamar a la acción del controlador.Desactivar la columna "updated_at" en Rails

Se supone que las entradas de este registro "registro" se crearán una vez y nunca se modificarán. Además, tendré muchos de estos registros en la base de datos.

Por lo tanto, no es necesario utilizar la columna "updated_at" (no es necesario perder la memoria en la unidad de disco duro).

¿Cómo puedo decirle a Rails que deje solo la columna "created_at" y que no use "updated_at"?

¿Hay alguna manera de hacer que el modelo "Log" solo sea de lectura?

Respuesta

17

Puede hacer que el modelo de sólo lectura mediante la adición de un método readonly? al modelo.

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 

El ejemplo anterior fue adoptado de here.

Si no necesita la columna updated_at, simplemente elimínela (o no la agregue) de su base de datos. Rails no actualizará lo que no está allí.

+0

Genial, gracias. Una cosa más: ¿cómo puedo evitar destruir el disco? Este truco con "readonly?" no funciona para eso ... – AntonAL

+0

He actualizado el ejemplo. Lo obtuve del mismo enlace. –

34

Supongo que tiene la columna updated_at porque usó la abreviatura t.timestamps en el archivo de migración de su modelo. Si no desea que la columna se puede especificar lo que deseas de forma explícita:

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 
+0

John, ¿esta es una solución validada? ¿Lo usaste? – Hamdan

+1

Mi respuesta fue correcta en el momento en que la publiqué. –

+0

Buena solución. Rails es lo suficientemente inteligente como para saber actualizar created_at si la columna existe. –

Cuestiones relacionadas