phoenix-framework - 如何使用 Ecto/Phoenix 为嵌套资源创建变更集

标签 phoenix-framework ecto

我的 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/

相关文章:

elixir - Ecto+ Phoenix : How to make resource paths with a different key than :id?

elixir - ecto:如何使用put_assoc在一个更新中更新和插入关联

elixir - 该应用程序未在观察者中列出

elixir - 如何正确编写交易并消除错误

elixir - 如何修复 'Could not check origin for Phoenix.Socket transport'错误? ( Phoenix 1.2.1)

创建新的 Phoenix 项目时,用户 'root' @'localhost' 的 MySQL 访问被拒绝

elixir - 在伞式应用程序中测试 Ecto 2.0

elixir ecto naive_datetime 转换错误

postgresql - Ecto 加入返回 nil 记录

json - Phoenix : render JSON from a template