etimologia docs elixir phoenix-framework ecto

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"