Как использовать несколько наборов изменений на одной странице - PullRequest
1 голос
/ 10 апреля 2020

Мне нужно обновить 3 таблицы одновременно. На одной странице есть 3 набора изменений.

Если я отправлю 3 набора настроек с form_for, как я могу написать код? Ниже приведены 3 таблицы.

---------
 members
---------
id
name

----------------
 member_details  
----------------
member_id
address
phone_no

--------------
 member_items
--------------
member_id
item_id

Или приветствуется другой способ.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Я чувствовал себя в такой же проблеме, как и вы. Вам не нужно 3 набора изменений. Вам нужен embedded_schema, который содержит 3 верхних элемента, которые вы пытаетесь вставить. Затем, когда вы отправляете форму, вы можете вызвать каждый набор изменений, соответствующий элементу, который вы пытаетесь вставить. Наконец, вы используете Ecto.Multi или Repo.transaction в другом, чтобы эта операция все провалилась или все прошло успешно. Посмотрите на верхнее описание (в частности, пример SignUp) документации схемы, как это работает. https://hexdocs.pm/ecto/Ecto.Schema.html

0 голосов
/ 10 апреля 2020

Если вы хотите, чтобы таблицы были либо полностью обновлены, либо нет, это потребовало транзакции. Идеальный вариант использования для Ecto.Multi. Существует пример , который вы можете напрямую применить к вашему делу.

Чтобы разделить входящие параметры на три набора, можно использовать Map.take/2.

...