我在我的凤凰应用程序中有一个嵌套的资源,我正在为它创建一个变更集。问题是,Ecto.build_assoc
希望映射有原子键,但是我的params有字符串键。为嵌套资源创建变更集的正确方法是什么?
def create(conn, %{"component" => component_params}, generator) do
changeset = Ecto.build_assoc(generator, :components, component_params) # attributes don't get set
...
end
发布于 2016-05-19 08:32:10
如果按惯例编写,调用changeset
函数将处理您要使用Ecto.Changeset.Cast/4
进行的转换。
菲尼克斯/Ecto故意不信任原始用户的输入。变化是处理这一问题的“经济方式”。
下面是一种更常规的方法来处理控制器中要执行的操作:
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
https://stackoverflow.com/questions/37309743
复制相似问题