如何使用Geo库创建有效的Ecto Model变更集?

时间:2015-11-23 12:07:32

标签: postgis elixir phoenix-framework ecto

我尝试使用Geo库通过Phoenix模型更改集存储Geo.Point。我的参数是:{coordinates: [49.44, 17.87]}或者更喜欢{coordinates: {latitude: 49.44, longitude: 17.87}}

在iex控制台中我试过:

iex(5)> changeset = Place.changeset(%Place{}, %{coordinates: [49.44, 17.87]})
%Ecto.Changeset{action: nil, changes: %{}, constraints: [],
 errors: [coordinates: "is invalid"], filters: %{}
 model: %Myapp.Place{__meta__: #Ecto.Schema.Metadata<:built>,
  coordinates: nil, id: nil, inserted_at: nil, updated_at: nil}, optional: [],
 opts: [], params: %{"coordinates" => [49.445614899999995, 17.875574099999998]},
 repo: nil, required: [:coordinates],

所有其他尝试以Poison.Parser错误结束。

如何从客户端查看params以创建有效的变更集?

型号:

defmodule MyApp.Place do
  use MyApp.Web, :model

  schema "place" do
    field :coordinates, Geo.Point

    timestamps
  end

  @required_fields ~w(coordinates)
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

1 个答案:

答案 0 :(得分:0)

对于将来的读者,还有geo_postgis,由同一作者创建,基于geo,它是postgrex扩展,可与ecto一起使用。