У меня есть родительский и дочерний компоненты. Я хотел бы создать родительский элемент одновременно с дочерним, потому что родитель не может существовать без дочернего элемента. В частности у меня есть subscriptions
, который has_many
services
Создайте родительскую, дочернюю вложенную связь с требуемым foreign_id одновременно в Ecto
Если мой ребенок модель имеет требуемое поле является иностранное ограничение, как я создаю обе модели одновременно? Я получаю сообщение об ошибке в моем наборе изменений, указывающее, что parent.id не может быть пустым.
Я знаю, что могу сделать Repo.insert!(Subscription)
, а затем создать Service
changeet с subscription.id
, но мне было интересно, можно ли создавать оба одновременно?
Мои родительские и дочерние ревизиями перечислены ниже:
Родитель (Подписка)
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
ребенка (службы)
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:start_time, :frequency, :subscription_id])
|> validate_required([:subscription_id])
|> foreign_key_constraint(:subscription_id)
end
Какое поле в подписке зависит от службы здесь? И можете ли вы отправить точное сообщение об ошибке? – Dogbert