2010-07-27 7 views
22

Ich habe ein einfaches "Log" -Modell, das die Tatsache aufzeichnet, die Controller-Aktion aufzurufen.Spalte "update_at" in Rails deaktivieren

Einträge von diesem "Protokoll" -Datensatz sollen einmal erstellt und nie geändert werden. Außerdem werde ich viele dieser Datensätze in der Datenbank haben.

So, es gibt keine Notwendigkeit für "update_at" Spalte (müssen nicht den Speicher auf der Festplatte verschwenden).

Wie kann ich Rails mitteilen, nur die Spalte "created_at" zu lassen und nicht "updated_at" zu verwenden?

Gibt es eine Möglichkeit, das "Log" -Modell nur lesbar zu machen?

Antwort

17

können Sie das Modell nur lesbar durch Hinzufügen eines readonly? Methode zum Modell machen.

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 

Das obige Beispiel wurde von here übernommen.

Wenn Sie die Spalte updated_at nicht benötigen, entfernen Sie sie (oder fügen Sie sie nicht hinzu) aus Ihrer Datenbank. Schienen werden nicht aktualisieren, was nicht da ist.

+0

Cool, danke. Noch eine Sache - wie kann ich verhindern, dass die Platte zerstört wird? Dieser Trick mit "readonly?" funktioniert nicht dafür ... – AntonAL

+0

Ich habe das Beispiel aktualisiert. Habe es von demselben Link bekommen. –

34

Ich nehme an, Sie haben die updated_at Spalte, weil Sie die t.timestamps Kurzschrift in der Migrationsdatei Ihres Modells verwendet haben. Wenn Sie die Spalte nicht wollen, dann können Sie angeben, was Sie explizit wollen:

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, das ist eine validierte Lösung? Hast du es benutzt? – Hamdan

+1

Meine Antwort war korrekt, als ich sie gepostet habe. –

+0

Gute Lösung. Rails ist schlau genug zu wissen, created_at zu aktualisieren, wenn die Spalte existiert. –

Verwandte Themen