The*_*Fox 11 elixir phoenix-framework
我有一个凤凰路线,我想将一些表格数据发布到,但是表格中有大约4个字段是可选的(表格由最终用户构建,因此这些字段可能不存在于POST有效载荷中)
在路线的凤凰控制器中,您将如何处理?
例如:
我的表格有
Field1,
Field2
Field3 (optional)
Field4 (optional)
Field5 (optional)
Run Code Online (Sandbox Code Playgroud)
POST表单必须始终具有Field1,Field2但可以包含其他字段的任意组合.
所以到目前为止我的控制器代码是这样的:
def create(conn, %{"field1" => field1, "field2" => field2) do
end
Run Code Online (Sandbox Code Playgroud)
如何让其他3个可选?如果我将它们全部添加到那时它们将是必需的,我不希望为每个可能提交的表单创建一个函数,因为它似乎有点过分.
wha*_*ide 27
控制器接收的参数只是一张地图,所以你可能正在寻找类似的东西Map.get/3.使用此功能,您可以在以下行中执行以下操作:
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
f3 = Map.get(params, "field3", "my default value")
# similar for the other fields
end
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个包含可选参数的所有默认值的地图,然后使用Map.merge/2:
@optional_params %{"field3" => "default3", "field4" => "default4"}
def create(conn, %{"field1" => f1, "field2" => f2} = params) do
# `params` has precedence over `@optional_params`, that's why we're using it
# as the second argument here.
params = Map.merge(@optional_params, params)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4026 次 |
| 最近记录: |