在变更集验证之前在哪里以及如何包装params?

时间:2015-11-24 13:02:01

标签: postgis elixir phoenix-framework ecto

previous question之后的下一个难点,我试图传递到由%Geo.Point函数包裹的变更集坐标,在Map.put坐标中键保持不变,但目标问题是如何以及在哪里坐标被包裹?我可以在模式加工中的某个地方执行此操作,或者在控制器中通过变更集或模型中的变更集方法之前更好吗?

def create(conn, %{"notify" => %{"coordinates" => %{"latitude" => latitude, "longitude" => longitude}} = notify_params}) do
  geo = %Geo.Point{coordinates: {latitude, longitude}}
  Map.put(notify_params, :coordinates, geo ) # coordinates are immutable
  changeset = Notify.changeset(%Notify{}, notify_params)
  #...
end

1 个答案:

答案 0 :(得分:4)

使用notify_params将起作用,但是您没有绑定该值。

这将使用您的新值重新绑定"coordinates"变量。请注意,您应使用:coordinates代替notify_params = Map.put(notify_params, "coordinates", geo) ,因为参数使用字符串作为键。

notify_params = %{notify_params | "coordinates" => geo}

如果密钥不存在,地图更新还有另一种(首选)语法错误。

{{1}}