ユーザーモデルとチャットモデルがあります。直感的に複数の人がいつでも同じチャットグループに属し、各人は多くのチャットグループを持つことができます。したがって、チャットグループは複数のuser_id
's。
チャットグループとユーザーのスキーマは次のとおりです。
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
これを処理する方法はありますか?
これは古い質問であり、以前に受け入れられた答えは事実上の方法ではなくなりました。
EctoはHABTMまたは多対多の関連付けをサポートするようになりました。
https://hexdocs.pm/ecto/Ecto.Schema.html#many_to_many/
many_to_many :users, MyApp.User, join_through: "chat_group_users"
Ectoは、関係を通じて has_many/ をサポートしています。これには、チャットグループとユーザーの間に中間テーブルを作成することが含まれます。
これは、次のスキーマを使用して実行できます。
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
他の方法で関連付けを行うこともできます。
user.ex:
schema "users" do
has_many :chat_group_users, MyApp.ChatGroupUsers
has_many :chats, through: [:chat_group_users, :chat]
end
これにより、次のようなことができます。
Repo.get(Chat, 1) |> Repo.preload(:users)
これにより、チャットモデルのユーザーが取得され、:user
キーと値。