【发布时间】:2020-11-01 01:09:14
【问题描述】:
请考虑以下架构:
schema "businesses" do
...
has_many :contacts, Contact
has_many :conversations, Conversation
...
end
schema "contacts" do
...
belongs_to :business, Business
has_one :conversation, Conversation
...
end
schema "conversations" do
...
belongs_to :business, Business
belongs_to :contact, Contact
has_many :messages, Message
...
end
schema "messages" do
belongs_to :conversation, Conversation
belongs_to :contact, Contact
end
This answer 展示了如何将两个关联放在一个结构上。
我遵循了这种模式并且效果很好。
def create_conversation(%{business: business, contact: contact, message: message} = attrs) do
business
|> Ecto.build_assoc(:conversations)
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_assoc(:contact, contact)
|> Repo.insert()
end
但是,我想知道创建message(这是上面新创建的conversation 的关联)的惯用方式是什么,以便与这个新创建的conversation 相关联。在一个Repo.insert() 电话中执行此操作是否有意义?有使用 Elixir / Ecto 经验的人会如何解决这个问题?
【问题讨论】:
标签: elixir associations ecto