2015-10-14 13 views
6

Próbuję uzyskać relację has_many :through pracując w Ecto dla wielu wielu relacji między modelem User a modelem Group.Ecto has_many: w postaci

Jedyne informacje, które udało mi się znaleźć w Internecie, dotyczyły zagnieżdżonych atrybutów w poście autorstwa José Valima here (co jest znakomite, nawiasem mówiąc).

Ponieważ grupy już istnieją w systemie, miałem nadzieję, że zrobię kilka wejść wielokrotnych. W trakcie tego natrafiłem na kilka problemów. Nie sądzę, że możliwe jest przypisanie skojarzenia groups w zestawie zmian bezpośrednio, ponieważ otrzymałem błąd za każdym razem, gdy próbowałem to zrobić. Moja następna myśl polegała na ręcznym wykonaniu pracy (odnalezieniu, usunięciu i wstawieniu rekordów), jednak nie byłem pewien, czy jest to właściwa droga do zejścia, i chciałbym najpierw zasięgnąć porady.

Ponieważ próbka kodu ma kilka linijek, wykonałem sedno here.

Jeśli wolę, aby opublikować go bezpośrednio w tym pytaniu, z pewnością mogę to zrobić.

Dzięki za pomoc!

+0

Nie mogę mówić do kodu Ecto, ale mogę mówić do zasad projektowania DB. Relacyjne bazy danych DB powiedzą, że nie można modelować relacji n do n. Robisz to, budujesz tabelę relacji (w twoim przypadku coś podobnego do UsersInGroups), a następnie budujesz 1-n od użytkowników i grup do tego. Nie jestem pewien, czy pomogłoby to problemowi Ecto, ale prawdopodobnie jest to lepszy sposób na modelowanie danych. FWIW. –

Odpowiedz

3

Niestety Ecto 1.0 nie obsługuje wielu do wielu. Oznacza to, że będziesz musiał otrzymać identyfikatory i ręcznie zbudować powiązanie pośrednie dla każdej grupy powiązanej z użytkownikiem. Mamy nadzieję, że ułatwi to w przyszłych wydaniach.

EDYCJA: Ecto 2.0 obsługuje wiele_do_many.

+0

Dzięki za heads up! –

+2

Aby potwierdzić, Ecto obsługuje has_many: through (poprzez tabelę sprzężenia), po prostu nie ma stylu Railsowego has_and_belongs_to_many. Czy to prawda? Dokumenty: http://hexdocs.pm/ecto/Ecto.Association.HasThrough.html – neon

+0

@ José czy to nadal ma miejsce w przypadku najnowszej wersji ecto? (Według stanu na 2018 stycznia, jest to 2.27) – dsignr