我的 Phoenix 应用程序中有一个嵌套资源,我正在尝试为其创建变更集。问题是 Ecto.build_assoc 期望映射具有原子键,但我的参数具有字符串键。为嵌套资源创建变更集的正确方法是什么?
def create(conn, %{"component" => component_params}, generator) do
changeset = Ecto.build_assoc(generator, :components, component_params) # attributes don't get set
...
end
最佳答案
如果按照常规编写,调用您的 changeset
函数将使用 Ecto.Changeset.Cast/4
处理您正在寻找的转换。 .
Phoenix/Ecto 故意不信任原始用户输入。变更集是处理此问题的“Ecto 方式”。
这是一种更传统的方法来处理您在 Controller 中要执行的操作:
def create(conn, %{"component" => component_params}, generator) do
changeset =
generator
|> Ecto.build_assoc(:components)
|> Component.changeset(component_params)
...
end
鉴于您在 component.ex
中有类似的内容:
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
关于phoenix-framework - 如何使用 Ecto/Phoenix 为嵌套资源创建变更集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309743/