我是 Elixir/Phoenix 的新手,并试图通过构建一个小应用程序来学习。
我正在从第 3 方 API 获取数据并不断收到以下错误。
(ArgumentError) argument error :erlang.iolist_to_binary([%{"24h_volume" => "1000", "name" => "some_name"},{...}])
我在控制器中拥有的是:
HTTPoison.start
%HTTPoison.Response{body: body} = HTTPoison.get!(url)
body = body
|> Poison.decode!(keys: :atoms!)
这不起作用。我使用了 (keys: :atoms),这在 Poison 文档中是不鼓励的。
这是我的架构:
schema "things" do
field :name, :string
field :volume_24h, :float
timestamps()
end
@doc false
def changeset(%Thing{} = thing, attrs) do
thing
|> cast(attrs, [:volume_24h, :name])
|> validate_not_nil([:volume_24h, :name])
end
def validate_not_nil(changeset, fields) do
Enum.reduce(fields, changeset, fn field, changeset ->
if get_field(changeset, field) == nil do
add_error(changeset, field, "nil")
else
changeset
end
end)
end
我正在尝试为“24h_volume”使用不同的字段名称,但出现此错误:
(ArgumentError) argument error :erlang.binary_to_existing_atom("24h_volume", :utf8)
我显然在这里遗漏了一些东西。
有没有办法将所需的字段名称传递给 Poison,因为“24h_volume”不是有效的原子?我该如何解决这些错误?