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

2024-03-26

我正在尝试使用Geo https://github.com/bryanjos/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 错误而结束。

应该如何从客户端查看参数来创建有效的变更集?

Model:

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

根据库的测试:

https://github.com/bryanjos/geo/blob/351ee6c4f8ed24541c9c2908f615e7b0a238f010/test/geo/ecto_test.exs#L100 https://github.com/bryanjos/geo/blob/351ee6c4f8ed24541c9c2908f615e7b0a238f010/test/geo/ecto_test.exs#L100

您需要将 Geo.Point 传递给您的变更集函数:

changeset = Place.changeset(%Place{}, %{coordinates: %Geo.Point{coordinates: {49.44, 17.87}})

您可以在[文档]中阅读有关自定义 ecto 类型的更多信息。(https://hexdocs.pm/ecto/Ecto.Type.html#content https://hexdocs.pm/ecto/Ecto.Type.html#content)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Geo 库创建有效的 Ecto 模型变更集? 的相关文章

  • Ecto 和 Elixir 的默认日期时间

    我今天刚刚开始使用 Elixir 和 Phoenix 我正在尝试添加 Ecto 作为映射器 但我在使用时间时遇到了一些问题 这是我的模型 schema users do field name string field email strin
  • PostGIS - 将多多边形转换为单多边形

    是否可以将包含多个多边形的形状文件导入到 PostGIS 中的单个多边形中 每当我尝试导入多边形的形状文件时 它都会作为多多边形 而不是单个多边形 存储在geom柱子 因此 我无法从多重多边形中将其提取为单个多边形值 非常感谢所有有用的建议
  • PostgreSQL 中列名包含冒号的问题

    我从 OSM 下载了形状数据 我已将数据从 Shapefile 导入到 PostgreSQL 没有任何问题 但在执行 select 语句时出现错误 Select addr city From location Error syntax er
  • 如何在 Elixir 或 Phoenix 框架中安排代码每隔几个小时运行一次?

    假设我想每 4 小时发送一堆电子邮件或重新创建站点地图或其他任何内容 我该如何在 Phoenix 或仅使用 Elixir 做到这一点 有一个简单的替代方案 不需要任何外部依赖项 defmodule MyApp Periodically do
  • 如何在 Elixir 中将字符串转换为 Ecto.DateTime?

    我需要将包含有效 UTC 时间的字符串转换为Ecto DateTime一个 稍后我会将其以正确的格式插入到我的数据库中 我尝试过使用Ecto DateTime cast date 方法但似乎不起作用 该字符串是Sat Aug 04 11 4
  • 如何通过 SSL 从 Phoenix Web App 连接到 PostgreSQL?

    When trying to run Elixir Phoenix Web Application using PostgreSQL Database hosted 3rd party Database as a Service Azure
  • 最近邻居的 Postgis SQL

    我正在尝试计算最近的邻居 为此 我需要传递一个参数来限制与邻居的最大距离 例如 半径1000米内最近的邻居是哪些 我做了以下事情 我用数据创建了表 id name latitude longitude 之后 我执行了以下查询 SELECT
  • 创建新的保护子句

    在 Elixir 中 我将如何为函数创建新的保护子句 显然 我已经看到你不能只调用 a 中的任何函数when声明 但如果能够做这样的事情那就太好了 defmodule Player do def play card player do de
  • Elixir Ecto:模式中的多个belongs_to关系

    我有以下架构 defmodule Message do use Ecto Schema schema messages do belongs to user FPL Club foreign key user to id belongs t
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • 在 field_name 中指定反向关系时,GeoDjango GeoQuerySet.distance() 会导致“ST_Distance 输出仅在 GeometryFields 上可用”

    从文档和其他问题来看 按距离对 GeoQuerySet 进行排序应该很简单 但我在让它工作时遇到了困难 下面通过一个例子来说明问题的情况 假设我在两个不同的应用程序中获得了两个模型 appA 中的一个模型和 appB 中的另一个模型定义如下
  • 使用 Elixir 生成首字母头像 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发 Elixir 并希望提供头像服务 如果用户没有头像 可以制作一个带有他们姓名首字母缩写的头像 如下所示 我真的不知道从哪里
  • Elixir 中的多行注释

    大多数语言都允许块注释和多行命令 例如 HTML 中的多行注释如下所示 在 Elixir 中 我发现的最接近的东西来自 EEx docs https hexdocs pm eex EEx html EEx智能引擎似乎从源中被丢弃 即使它们是
  • 类型不匹配插入:binary_id 与 Ecto 变更集

    我有一张桌子applications有外键user id这是一个 Postgresuuid 我在我的web ex primary key id binary id autogenerate true foreign key type bin
  • Elixir 如何将 Map 结构转换为 Record 结构

    我有一个 Record 结构和一个 Map 结构 例如 defmodule Foo Bar do defstruct boo nil baz nil end defmodule Foo do require Record Record de
  • 将新元素添加到列表中

    我试图将一个新元素添加到列表中 如下所示 iex 8 gt l 3 5 7 7 8 3 3 5 7 7 8 3 iex 9 gt l 3 5 7 7 8 3 为什么我会排在第五位 8 3 它是什么意思 如何将新元素添加到列表中 Update
  • postgres - 错误:运算符不存在

    再说一次 我有一个在本地运行良好的函数 但是将其转移到网上会产生一个很大的错误 从有人指出我传递的参数数量不准确的响应中得到提示 我双重 在这种情况下检查以确保我向函数本身传递了 5 个参数 Query failed ERROR opera
  • Elixir:模式匹配对于元组和映射的工作方式不同

    在 Elixir 中 如果我尝试模式匹配以下两个元组 a 1 2 我收到匹配错误 但如果我对两张地图做同样的事情 x a x 1 y 2 它工作正常 并且a绑定到 1 我可以明白为什么匹配两个元组会出错 但为什么匹配映射不会出错 在第一个示
  • 如何在 Elixir 中展平嵌套列表?

    我有一个嵌套列表 1 2 3 4 5 6 我怎样才能把它压平 使它变成 1 2 3 4 5 6 无需重新发明轮子 只需使用List flatten 1 https hexdocs pm elixir List html flatten 1
  • Phoenix:在模板内分配值的渲染模板

    我正在尝试使我的应用程序干燥且模块化 但是 当我尝试将一个组件 小模板 放入另一个模板 较大的模块 中 该组件接收调用 实例化 时传递的动态值时 我收到此错误 assign conn not available in eex templat

随机推荐