Ich habe ein paar Felder in einem Ecto-Modell, für das ich a) Standardwert einfügen möchte b) Wert generieren, wenn ich eine Einfügung mache. Wie kann ich das machen? In welcher Funktion soll ich das tun, in "changeset"?Wie kann ich einige Werte in einem Ecto-Modell auf Einfügen setzen
Antwort
Ja, der übliche Ort für solche Dinge ist die Changeset-Funktion. Wenn Sie unterscheiden müssen, was beim Einfügen und Aktualisieren passiert, können Sie mehrere Changeset-Funktionen definieren und beim Aktualisieren oder Einfügen der Daten die entsprechende Funktion aufrufen. Zum Beispiel:
defmodule MyApp.Schema do
#...
def insert_changeset(struct, params) do
struct
|> common_changeset(params)
|> put_change(:foo, "bar") # writing a field to the changeset
# ...
end
def update_changeset(struct, params) do
struct
|> common_changeset(params)
# ...
end
defp common_changeset(struct, params) do
struct
|> cast(params, [:foo, :bar])
# ...
end
end
Wenn der Standardwert statisch ist, können Sie auch default:
Wahl des Ecto für das field/3
Makro im Schema verwenden - es gleichwertig ist einen Wert für ein Feld in der defstruct
Erklärung zu bieten.
Was ist der Unterschied zwischen put_change und update_change? put_change kann auch einen Wert wie update_change aktualisieren. – darko
Es ist der gleiche Unterschied wie zwischen 'Map.put/3' und' Map.update! /3' - der erste nimmt einen neuen Wert an, der zweite nimmt eine Funktion, die den alten Wert in einen neuen umwandelt. – michalmuskala
put_change kann einfügen, wenn es nicht existiert und einen Wert aktualisieren, wenn es existiert, oder? – darko
- 1. Ich kann keine Werte in TwinColSelect setzen
- 2. Wie kann ich Schleife und setzen Wert in einem Feld
- 3. MySQL aktuelle Datum in einem DATETIME-Feld auf Einfügen setzen
- 4. Mehrere Werte in einem Parameter setzen
- 5. Wie kann ich einzelne Bits in einem Float bekommen/setzen?
- 6. Wie kann ich in Yii ein Datum auf NULL setzen?
- 7. Wie kann ich einige Parameter in einem String aktualisieren?
- 8. Wie kann ich den Elementindex eines Auswahlelements auf -1 setzen?
- 9. Java MessageFormat - Wie kann ich Werte zwischen einfachen Anführungszeichen einfügen?
- 10. Wie überspringe ich einige Tabellenspalten beim Einfügen in PHP?
- 11. Kann Werte in meine SQLite-Datenbank einfügen
- 12. Wie kann ich ngFor auf einige Elemente in Angular beschränken?
- 13. Wie kann ich UICollectionviewCell setzen
- 14. Wie kann ich einen Zeitstring in ein GDB-Protokoll einfügen?
- 15. Wie kann ich Werte eines INSERT in einem Trigger auf SQL Server bearbeiten?
- 16. Wie kann ich ein Ereignis auf einen Kontextmenüeintrag setzen?
- 17. Kann keine Werte in MYSQL Tabelle einfügen
- 18. Wie kann ich einen aktuellen BindingSource-Datensatz auf null setzen?
- 19. Wie alle Werte in Arraylist auf hashmap in Android setzen?
- 20. Kann keine Werte auf Variablen im Frühjahr setzen MVC
- 21. Wie MongoCollection aufzusteigen, aber einige Werte beibehalten?
- 22. Wie kann ich Symbol auf benutzerdefiniertes Plugin in WordPress setzen
- 23. Ändern Standard-Hive-Ergebnis auf einige Werte
- 24. Wie kann ich den in ListPreference geprüften Wert setzen
- 25. Wie könnte ich einige bestimmte Werte in meinem HTML verstecken
- 26. Wie kann ich nur einige Felder mit einem Bindestrich verketten?
- 27. Select2 kann nicht mehrere Werte setzen
- 28. Wie kann ich auf Wildfly distinct-name setzen?
- 29. Wie kann ich mit Xamarin.Forms auf ID/Name-Werte in einem Array von JSON-Objekten zugreifen?
- 30. Wie kann ich auf Werte in diesem JSON zugreifen?
Können Sie ein konkretes Beispiel geben? Der Standardwert kann mit der Option ': default' in https://hexdocs.pm/ecto/Ecto.Schema.html#field/3 festgelegt werden. Dieser Wert wird jedoch zur Kompilierzeit ausgewertet, so dass Sie beispielsweise Ecto.DateTime nicht verwenden können .utc'. – Dogbert