gpt4 book ai didi

elixir - 如何验证嵌套 map 中所需的内容

转载 作者:行者123 更新时间:2023-12-04 10:55:42 25 4
gpt4 key购买 nike

我正在与 Elixir 合作。

我收到了一些属性,并使用它们来创建 location .属性是这样的:
attrs = %{latitude: 123.2, longitude: 123.4, metadata: %{timestamp: "2015-05-05T01:31:54", accuracy: 1}}
要创建我使用:

location
|> cast(attrs, [:latitude, :longitude, :metadata])
|> validate_required([:latitude, :longitude])

有没有一种方法可以验证 metadata.timestamp 所需的内容?
谢谢!

最佳答案

您可以为元数据创建另一个架构,并嵌入一个 Metadata .这将使您能够转换和验证元数据中的字段。这是代码的样子:

defmodule Location do
use Ecto.Schema

schema "location" do
field :latitude, :float
field :longitude, :float
embeds_one :metadata, Metadata
end

def changeset(location, attrs) do
location
|> cast(attrs, [:latitude, :longitude, :metadata])
|> validate_required([:latitude, :longitude])
|> cast_embed(:metadata)
end
end

和您的元数据:
defmodule Metadata do
use Ecto.Schema

embedded_schema do
field :timestamp, :utc_datetime
field :accuracy, :integer
end

def changeset(metadata, attrs) do
location
|> cast(attrs, [:timestamp, :accuracy])
|> validate_required([:timestamp])
end
end

这将是使用 Ecto Schemas 验证嵌套映射的结构方式,但 ofc。您可以编写自己的验证函数, here是如何做到这一点的一个例子。

关于elixir - 如何验证嵌套 map 中所需的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com