在 SELECT 映射中设置值
Set the value in the SELECT map
我正在尝试将地图发送到前端。如果我像下面的代码一样在键中放置一个原子,它就可以正常工作。
defp build_select(queryable, opts_select) do
if opts_select == nil do
queryable
else
Enum.reduce opts_select, queryable, fn ({k, v}, queryable) ->
a = from q in queryable,
select: %{Data: field(q, ^(String.to_existing_atom k))}
end
end
end
但我想发送 k 值而不是数据。我该怎么做? K 是一个字符串。
我尝试将 k 的值转换为 atom 并使用它,但它不起作用。
您可以将 map 与插入的字段列表一起使用。
select_list = Enum.map(opts_select, fn {k, _v} -> String.to_existing_atom(k) end)
from q in queryable,
select: map(q, ^select_list)
%{key: value}
语法适用于 map 仅 硬编码原子作为键。对于动态值,一个 should use the hashrocket syntax:
这行不通:
key = :foo
%{key: :bar}
#⇒ %{key: :bar}
这将:
key = :foo
%{key => :bar}
#⇒ %{foo: :bar} # NOTE :foo as a key
所以,回到你的例子:
- select: %{Data: field(q, ^(String.to_existing_atom k))}
+ key = String.to_existing_atom k
+ select: %{k => field(q, ^k)}
我正在尝试将地图发送到前端。如果我像下面的代码一样在键中放置一个原子,它就可以正常工作。
defp build_select(queryable, opts_select) do
if opts_select == nil do
queryable
else
Enum.reduce opts_select, queryable, fn ({k, v}, queryable) ->
a = from q in queryable,
select: %{Data: field(q, ^(String.to_existing_atom k))}
end
end
end
但我想发送 k 值而不是数据。我该怎么做? K 是一个字符串。
我尝试将 k 的值转换为 atom 并使用它,但它不起作用。
您可以将 map 与插入的字段列表一起使用。
select_list = Enum.map(opts_select, fn {k, _v} -> String.to_existing_atom(k) end)
from q in queryable,
select: map(q, ^select_list)
%{key: value}
语法适用于 map 仅 硬编码原子作为键。对于动态值,一个 should use the hashrocket syntax:
这行不通:
key = :foo
%{key: :bar}
#⇒ %{key: :bar}
这将:
key = :foo
%{key => :bar}
#⇒ %{foo: :bar} # NOTE :foo as a key
所以,回到你的例子:
- select: %{Data: field(q, ^(String.to_existing_atom k))}
+ key = String.to_existing_atom k
+ select: %{k => field(q, ^k)}