首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为嵌套资源w/ Ecto/菲尼克斯创建变更集

如何为嵌套资源w/ Ecto/菲尼克斯创建变更集
EN

Stack Overflow用户
提问于 2016-05-18 12:41:13
回答 1查看 1.2K关注 0票数 2

我在我的凤凰应用程序中有一个嵌套的资源,我正在为它创建一个变更集。问题是,Ecto.build_assoc希望映射有原子键,但是我的params有字符串键。为嵌套资源创建变更集的正确方法是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create(conn, %{"component" => component_params}, generator) do
  changeset = Ecto.build_assoc(generator, :components, component_params) # attributes don't get set
  ...
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 08:32:10

如果按惯例编写,调用changeset函数将处理您要使用Ecto.Changeset.Cast/4进行的转换。

菲尼克斯/Ecto故意不信任原始用户的输入。变化是处理这一问题的“经济方式”。

下面是一种更常规的方法来处理控制器中要执行的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create(conn, %{"component" => component_params}, generator) do
  changeset =
    generator
    |> Ecto.build_assoc(:components)
    |> Component.changeset(component_params)
  ...
end

考虑到您在component.ex中有类似的东西

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def changeset(model, params \\ :empty) do
  model
  |> cast(params, @required_fields, @optional_fields)
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37309743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文