请考虑以下架构:
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
这个答案说明了如何将两个关联放在一个结构上。
我遵循了这种模式,并且效果很好。
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中有经验的人将如何解决这个问题?
哇,这可行!
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)
|> Ecto.Changeset.put_assoc(:messages, [%Message{body: message.body}])
|> Repo.insert()
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句