【发布时间】:2021-10-09 02:52:17
【问题描述】:
我有一个item 表,我想拥有多个embedded schema,例如:
schema "items" do
field :name, :string
field :type, :string
#embed_one with :either, I found this somewhere online but can't get the doc anywhere.
embeds_one :details, either: [ Product, Service], on_replace: :update
@doc false
def changeset(item, attrs) do
item
|> cast(attrs, [:name, :type, :description, :publish, :user_id])
|> details_by_type(attrs[:type], :details)
end
#psuedo code of cast_embed
defp details_by_type(item, type, details) do
case type do
:product -> item |> #cast_embed of :details to Product
:service -> item |> #cast_embed of :details to Service
end
end
基本上,我想要一个 details 字段(:map),它根据项目的类型保留不同的嵌入模式。但我无法让它工作。我不断收到这样的错误:
(ArgumentError) 你试图在 [或者: [OkBackend.Items.Task,OkBackend.Items.Product, OkBackend.Items.Service],on_replace: :update]。模块(第一个 apply) 的参数必须始终是一个原子
这样做的正确方法是什么?
【问题讨论】:
标签: elixir phoenix-framework ecto