2015-10-14 3 views
6

Я пытаюсь получить отношения has_many :through, работающие в Ecto, для отношения многих факторов между моделью User и моделью Group.Ecto has_many: через форму

Единственная информация, которую я смог найти в Интернете, была связана с вложенными атрибутами в сообщении от José Valim here (что отличное, кстати).

Поскольку группы уже существуют в системе, я надеялся сделать несколько входных данных. В этом я столкнулся с несколькими проблемами. Я не считаю, что можно назначить ассоциацию groups в наборе изменений непосредственно, потому что я получал ошибку каждый раз, когда я пытался это сделать. Моя следующая мысль заключалась в том, чтобы сделать работу вручную (поиск, удаление и вставка записей GroupMembership), однако я не был уверен, что это был правильный путь, чтобы пойти вниз, и хотел сначала получить совет.

Поскольку образец кода имеет довольно много строк, я сделал gist here.

Если я предпочитаю, чтобы я опубликовал его прямо в этом вопросе, я, безусловно, могу это сделать.

Спасибо за помощь!

+0

Я не могу говорить с кодом Ecto, но я могу говорить о принципах проектирования БД. Реляционные типы БД скажут вам, что вы не можете моделировать n-n отношений. То, что вы делаете, - это построить таблицу отношений (в вашем случае что-то вроде UsersInGroups), а затем вы создадите для нее 1-n от пользователей и групп. Я не уверен, что это поможет вашей проблеме Ecto, но, скорее всего, это лучший способ моделирования ваших данных. FWIW. –

ответ

3

К сожалению, Ecto 1.0 не поддерживает многих для многих. Это означает, что вам нужно будет получить идентификаторы и вручную создать промежуточную связь для каждой группы, которую вы связываете с пользователем. Мы надеемся сделать это проще в будущих выпусках.

EDIT: Ecto 2.0 поддерживает many_to_many.

+0

Спасибо за головы! –

+2

Чтобы подтвердить, что Ecto поддерживает has_many: через (через таблицу соединений), просто не Rails-стиль has_and_belongs_to_many. Это правильно? Документы: http://hexdocs.pm/ecto/Ecto.Association.HasThrough.html – neon

+0

@ José - это все еще случай с самой последней версией ecto? (По состоянию на 2018 год, это 2,27) – dsignr

Смежные вопросы