Ich versuche, eine Sicherungstabelle von users
, archived users
genannt, zu erstellen. Er erstellt den ArchivedUser, indem er einen Hash der aktuellen Benutzerattribute (self) annimmt und ihn in self.id
als user_id
zusammenführt.Erstellen oder Aktualisieren von Datensatz für ArchivedUser
Wenn ein Benutzer wieder aktiviert wird, bleibt sein Datensatz als ArchivedUser
weiterhin in der ArchivedUser
Tabelle. Wenn der Benutzer ein zweites Mal gelöscht wird, sollten alle geänderten Attribute aktualisiert werden.
Derzeit führt es einen Überprüfungsfehler: Validation failed: User has already been taken
, wie die self.id
bereits in der Tabelle ArchivedUser
existiert.
Was ist eine bessere Möglichkeit, ein Objekt zu behandeln, wenn Sie ein vorhandenes Objekt aktualisieren, wenn möglich, oder einen neuen Datensatz erstellen, wenn dieser nicht existiert. Ich bin mit Rails 4 und haben find_or_create_by
versucht, aber es wirft einen Fehler
Mysql2::Error: Unknown column 'device_details.device_app_version'
, die ungerade ist, wie die Spalte in beiden Tabellen vorhanden ist und nicht geändert hat bekommen.
Benutzer löschen Methode
# creates ArchivedUser with the exact attributes of the User
# object and merges self.id to fill user_id on ArchivedUser
if ArchivedUser.create!(
self.attributes.merge(user_id: self.id)
)
Vielen Dank für einen Blick nehmen!