Ich habe eine Legacy-Datenbank, die ich versuche, in Ecto zu ziehen. Darin gibt es eine orders
Tabelle, die eine order_status_id
Spalte hat. order_status_id
bildet eine Menge von Konstanten im Altsystem ab.Kann sich der Ecto-Schema-Feldname vom Spaltennamen unterscheiden?
Ich möchte die MyApp.Order
Struktur enthalten ein order_status
Feld, das einen benutzerdefinierten Typ hat, der die Ganzzahl-IDs in sinnvolle Atome konvertiert. Ich habe den benutzerdefinierten Typ funktioniert, aber ich kann nicht herausfinden, wie ein Feld mit dem Namen order_status
zu einer Spalte mit dem Namen order_status_id
zugeordnet wird.
Das Legacy-System ist noch online und verwendet die Datenbank, daher ist das Ändern des DB-Schemas keine Option. Gibt es eine Möglichkeit, dies zum Laufen zu bringen?
Mein Verständnis ist, dass 'changeset \ 2' nur ausgeführt wird, wenn ein Datensatz erstellt oder persistiert wird. Ich glaube nicht, dass diese Lösung das Feld 'order_status' beim Laden eines Datensatzes aus der Datenbank füllen würde. –
Das stimmt, aber schauen Sie sich alle Codebeispiele selbst von Generatoren an. Sie sollten immer Änderungssets verwenden, bevor Sie auf die Datenbank zugreifen. Beim Schreiben darauf bieten Changesets eine Validierung für alle Dinge, die nicht auf db zugreifen müssen, und einfache Fehlermeldungen für Datenbankeinschränkungen. Wenn Sie aus der Datenbank lesen, sollten Sie auch changeset verwenden: 'model = Repo.get (Model, id) changeset = Model.changeset (model)' – tkowal