2016-05-28 4 views
0

In Ecto können Sie fields in your Schema einen Standardwert angeben, indem Sie sie wie field :name, default: "john" angeben. In den Dokumenten wird angegeben, dass dieser Standard zur Kompilierungszeit gespeichert wird und dass Dinge wie Date.now oder UUID.generate nicht funktionieren.Ecto: Wie definiert man variable Standardfeldwerte im Schema?

Meine Frage ist: Wie erstellen wir diese variablen Standardwerte? Man könnte sagen, "setzen Sie einfach den Wert nach dem Erstellen der Struktur". Bei der Arbeit mit virtuellen Feldern ist dies jedoch nicht möglich. Wenn Sie e. G. Repo.all(MyModel) oder andere Abfrage-Befehle, virtuelle Felder werden auf ihren Standard-Festwert gesetzt.

Wie können wir variable Schemafeldstandards erstellen?

+0

Ich bin mir nicht sicher, ob ich die Frage verstanden habe, aber Sie können den Standardwert überhaupt entfernen und für alle Datensätze festlegen, nachdem Sie sie mit 'Repo.all' abgerufen haben oder wenn Sie den Standardwert beibehalten möchten Einfach nach dem Abruf neu schreiben. – JustMichael

+0

@JustMichael Wenn Sie das tun, koppeln Sie Ihren Code fest: Entweder müssen alle Orte, die das Modell verwenden, über die Standardeinstellungen Bescheid wissen, oder das Modell muss wissen, wie es von der Datenbank abgefragt wird. – Qqwy

Antwort

3

Es ist nicht möglich. Ecto definiert einfach eine Struktur und Elixir-Strukturen werden zur Kompilierzeit erweitert.

Sie können dies umgehen, indem Sie explizit eine Funktion haben, um die Struktur mit Standardwerten zu erzeugen, oder tun Sie dies in der Changeset-Funktion über put_change und ähnlich.

Verwandte Themen