在Phoenix Framework表单中,如何使用changeset将belongs_to关系设置为null?

Don*_*ter 5 elixir ecto phoenix-framework

在Phoenix Framework表单中,我的页面上有一个选择框,可以选择将belongs_to值设置为nil.

<%= select f, :relation_id, 
  Enum.into(Enum.map(@relations, fn p -> {p.name, p.id} end), 
  [{"None", nil}]) %>
Run Code Online (Sandbox Code Playgroud)

表单通常会发送ID,但是当选择nil值时,它会将值作为空字符串传递:

"relation_id" => ""
Run Code Online (Sandbox Code Playgroud)

我从Ecto收到一个错误,即更改集无效,因为它需要一个整数.我可以拦截地图,将值设置为null,并将更新的地图传递给变更集.但有更简单的方法吗?

Fab*_*755 5

我认为你应该使用插头擦洗参数.

尝试添加到您的控制器:

defmodule MyApp.SomeThingController do
  use MyApp.Web, :controller

  plug :scrub_params, "some_thing" when action in [:create, :update]

  # def ....
end
Run Code Online (Sandbox Code Playgroud)

它将转换""(空)值为nil值.

希望能帮助到你.