Ich habe ein ActiveRecord-Modellobjekt Foo
; es stellt eine Standarddatenbankzeile dar.ActiveRecord save() für eine Instanz verhindern
Ich möchte in der Lage sein, modifizierte Versionen von Instanzen dieses Objekts anzuzeigen. Ich möchte die Klasse selbst wiederverwenden, da sie bereits alle Haken & Aspekte hat, die ich brauche. (Zum Beispiel: Ich habe bereits eine Ansicht, die die entsprechenden Attribute anzeigt). Grundsätzlich möchte ich die Modellinstanz klonen, einige ihrer Eigenschaften ändern und sie dem Aufrufer zurückgeben (Ansicht, Test, usw.).
Ich mache nicht wollen diese Attributänderungen zurück in die Datenbank. Allerdings möchte ich das Attribut id
in die geklonte Version einbeziehen, da es den Umgang mit den Route-Helfern viel einfacher macht. Daher plane ich, ActiveRecord::Base.clone()
aufzurufen, die ID der geklonten Instanz manuell festzulegen und dann die entsprechenden Attributänderungen an der neuen Instanz vorzunehmen. Das hat mich aber beunruhigt; eine save()
auf der modifizierten Instanz und meine ursprünglichen Daten werden verprügelt werden.
Also, ich bin auf der Suche nach der neuen Instanz zu sperren, damit es nichts anderes tut. Ich plane bereits, freeze()
zu benennen (unter der Voraussetzung, dass dies weitere Änderungen am Objekt verhindert, obwohl die documentation isn't terribly clear). Ich sehe jedoch keinen offensichtlichen Weg, um ein Speichern zu verhindern().
Was wäre der beste Ansatz, um dies zu erreichen?
Wenn Sie mit dem Standard Active Objekt um diese deutlich Schlamassel benötigen erhöhen können, gibt es wahrscheinlich einen besseren Weg, um das Problem zu nähern. – Matchu
Ich bin sicherlich offen für Alternativen –