elixir - docs - ecto etimologia
RelaciĆ³n Muchos a Muchos en Ecto (2)
Ecto tiene soporte para has_many/3 través de las relaciones. Esto implica crear una tabla intermedia entre sus grupos de chat y sus usuarios.
Puedes hacer esto con el siguiente esquema:
chat_group.ex:
schema "chat_groups" do
has_many :chat_group_users, MyApp.ChatGroupUser
has_many :users, through: [:chat_group_users, :user]
end
chat_group_user.ex:
schema "chat_group_users" do
belongs_to :chat_group, MyApp.ChatGroup
belongs_to :user, MyApp.User
end
También puedes hacer la asociación de la otra manera:
usuario.ex:
schema "users" do
has_many :chat_group_users, MyApp.ChatGroupUsers
has_many :chats, through: [:chat_group_users, :chat]
end
Esto te permite hacer cosas como:
Repo.get(Chat, 1) |> Repo.preload(:users)
Esto atraerá a los usuarios para su modelo de chat y completará la clave de :user
con el valor.
Tengo un modelo de Usuarios y un modelo de Chats. Intuitivamente, varias personas pertenecerán al mismo grupo de chat en cualquier momento y cada persona puede tener muchos grupos de chat. Por lo tanto, el grupo de chat debe pertenecer a varios user_id
''s.
Mi esquema para el grupo de chat y los usuarios son:
schema "chatGroups" do
field :name, :string
has_many :messages, Message
belongs_to :user, User
timestamps
end
schema "users" do
field :name, :string
has_many :chatGroups, ChatGroup
timestamps
end
¿Alguna sugerencia de cómo manejar esto?
Esta es una pregunta antigua y la respuesta previamente aceptada ya no era la manera de facto.
Ecto ahora soporta HABTM o muchas a muchas asociaciones.
https://hexdocs.pm/ecto/Ecto.Schema.html#many_to_many/3
many_to_many :users, MyApp.User, join_through: "chat_group_users"