Ich habe eine übergeordnete und eine untergeordnete Komponente. Ich möchte den Elternteil gleichzeitig mit dem Kind erstellen, da der Elternteil ohne das Kind nicht existieren kann. Speziell habe ich eine subscriptions
, die has_many
services
Erstellen Eltern, Kind verschachtelte Assoziation mit erforderlichen Foreign_id gleichzeitig in Ecto
Wenn mein Kind-Modell ein erforderliches Feld ist die Fremdeinschränkung, wie erstelle ich beide Modelle zur gleichen Zeit? Ich erhalte einen Fehler in meinem Changeset, der anzeigt, dass die parent.id nicht leer sein kann.
Ich weiß, ich kann Repo.insert!(Subscription)
tun, gefolgt von der Erstellung eines Service
Changeset mit subscription.id
, aber ich frage mich, ob es möglich ist, beide zur gleichen Zeit zu erstellen?
Parent (Abonnement)
def changeset(struct, params \\ %{}) do
# get the current time and add 30 days.
{:ok, active_until} = DateTime.utc_now()
|> DateTime.to_unix() |> Kernel.+(2592000) |> DateTime.from_unix()
struct
|> change(active_until: active_until)
|> cast(params, [:active_until, :user_id])
|> cast_assoc(:services)
|> validate_required([:active_until])
end
Child (Service)
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:start_time, :frequency, :subscription_id])
|> validate_required([:subscription_id])
|> foreign_key_constraint(:subscription_id)
end
Welches Feld im Abonnement hängt von Dienst tut hier Dies sollte? Und können Sie die genaue Fehlermeldung posten? – Dogbert