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
答案 0 :(得分:4)
使用notify_params
将起作用,但是您没有绑定该值。
这将使用您的新值重新绑定"coordinates"
变量。请注意,您应使用:coordinates
代替notify_params = Map.put(notify_params, "coordinates", geo)
,因为参数使用字符串作为键。
notify_params = %{notify_params | "coordinates" => geo}
如果密钥不存在,地图更新还有另一种(首选)语法错误。
{{1}}