2009-10-09 11 views

Antwort

45

Sie wollen attr_readonly verwenden:

Attribute als nur lesbar aufgeführt wird verwendet werden, um einen neuen Datensatz zu erstellen, aber Update-Operationen werden diese Felder ignorieren.

class Customer < ActiveRecord::Base 
    attr_readonly :your_field_name 
end 
+0

Dies ist die richtige Antwort auf Ihre Frage, aber "richtige" Lösung für Ihr Problem ist ein bisschen anders ... siehe den Kommentar zu der anderen Frage. – averell

+0

Ansonsten +1 auf die Antwort. – averell

2

Und das Feld ist immer und per Definition „richtige“ (das heißt eine genaue Darstellung der Realität) zum Zeitpunkt des Einsetzens?

Kein Benutzer macht jemals einen Fehler bei der Eingabe dieses Feldes für die erste (und nur in Ihrem Schema) Zeit?

+1

Tatsächlich gibt der Benutzer es überhaupt nicht ein, es wird vom Controller eingestellt. Was ich verhindern will, ist, dass jemand es mit einer veränderten Post-Anfrage modifiziert. – fresskoma

+8

In diesem Fall wollen Sie sich nicht mit "readonly" -Feldern herumschlagen. Sie möchten die Anweisung attr_protected in Ihrem Modell verwenden, um zu verhindern, dass das Feld durch Massenaktualisierungen geändert wird. Noch besser: Verwenden Sie 'attr_accessible', um nur ausgewählte Felder für Massenupdates verfügbar zu machen. – averell

+2

Um hier reinzukommen: Ich denke, der richtige Anwendungsfall von attr_readonly ist, wenn das Ändern dieses Feldes Ihre Datenintegrität zerstören würde. Ich habe ein Feld: valid_at, und das Ändern dieses Feldes sollte nie passieren, da es bedeuten würde, dass etwas mit Kernalgorithmen nicht stimmt. Wenn das passiert, ist alles an Deck. Alle Daten könnten schlecht sein. Daher sollte ich es niemals ändern müssen und würde lieber davor bewahren, dass es durch einen Fehler in anderem Code verändert wird. Wenn es jemals versucht wird geändert zu werden, möchte ich sehr laut aufblasen. – Houen

Verwandte Themen