2015-10-14 14 views
6

Tôi đang cố gắng để có được mối quan hệ has_many :through hoạt động trong Ecto cho mối quan hệ nhiều-nhiều giữa một mô hình User và mô hình Group.Ecto has_many: thông qua dạng

Thông tin duy nhất tôi có thể tìm thấy trực tuyến có liên quan đến thuộc tính lồng nhau trong một bài đăng của José Valim here (tuyệt vời, nhân tiện).

Vì các nhóm đã tồn tại trong hệ thống, tôi đã hy vọng thực hiện nhiều đầu vào được chọn. Tôi gặp phải một vài vấn đề khi làm điều đó. Tôi không tin rằng có thể gán liên kết groups trong changeset trực tiếp bởi vì tôi đã gặp lỗi mỗi khi tôi cố gắng làm như vậy. Suy nghĩ tiếp theo của tôi là thực hiện công việc thủ công (tìm kiếm, xóa và chèn các bản ghi GroupMembership), tuy nhiên tôi không chắc đây có phải là con đường đúng để đi xuống hay không và muốn nhận được lời khuyên trước.

Vì mẫu mã có khá một vài dòng, tôi đã tạo ra một gist here.

Nếu được ưu tiên là tôi đăng trực tiếp câu hỏi này, tôi chắc chắn có thể làm điều đó.

Cảm ơn tất cả trợ giúp!

+0

Tôi không thể nói với mã Ecto nhưng tôi có thể nói với các nguyên tắc thiết kế DB. Các kiểu DB quan hệ sẽ cho bạn biết rằng bạn không thể mô hình hóa các mối quan hệ n đến n. Những gì bạn làm là xây dựng một bảng quan hệ (trong trường hợp của bạn một cái gì đó như UsersInGroups) và sau đó bạn xây dựng một 1-n từ người dùng và nhóm để điều đó. Tôi không chắc chắn nó sẽ giúp Ecto của bạn vấn đề nhưng nó có thể là một cách tốt hơn để mô hình dữ liệu của bạn. FWIW. –

Trả lời

3

Thật không may Ecto 1.0 không hỗ trợ nhiều cho nhiều người. Điều đó có nghĩa là bạn sẽ cần nhận các ID và xây dựng liên kết trung gian theo cách thủ công cho từng nhóm bạn đang liên kết với người dùng. Chúng tôi hy vọng sẽ làm điều này dễ dàng hơn trong các bản phát hành trong tương lai.

EDIT: Ecto 2.0 hỗ trợ many_to_many.

+0

Cảm ơn những người đứng đầu! –

+2

Để xác nhận, Ecto hỗ trợ has_many: thông qua (thông qua một bảng tham gia), không phải kiểu Rails has_and_belongs_to_many. Có đúng không? Tài liệu: http://hexdocs.pm/ecto/Ecto.Association.HasThrough.html – neon

+0

@ José vẫn là trường hợp với phiên bản ecto mới nhất? (Kể từ năm 2018 tháng 1, nó là 2,27) – dsignr

Các vấn đề liên quan