Elixir 在“选择贴图”中设置值

Elixir 在“选择贴图”中设置值,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我正试图把地图发到前端。如果我像下面的代码一样在键中放一个原子,它就可以正常工作 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:

我正试图把地图发到前端。如果我像下面的代码一样在键中放一个原子,它就可以正常工作

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并使用它,但它不起作用。

您可以使用插值字段列表

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}语法仅适用于作为键的硬编码原子的映射。对于动态值,有一个:

这行不通:

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)}

我必须将它用作映射中的键值对,因为fieldq,^String.to_existing_原子k无法转换为list@hammadahmed你能用opts\u select的示例值将预期返回值添加到你的问题中吗?在opts\u select中,我有k=status\u id,v为空,如果k为status\u id,那么结果将是status\u id:value。谢谢,我会尝试。如果我有多个要显示的字段k,您能建议我如何在select中传递多个值吗。因为select只取一个参数,我不确定我是否正确地得到了这个问题,但是选择:%%{k1=>fieldq,^k1,k2=>fieldq,^k2}应该可以。我的意思是如果k是这样的列表[状态id,名字,…]。我在k中有多个字段,因此如何在上面的代码中实现它来显示这些字段。如list |>Enum.zipEnum.maplist,fn e->fieldq,^e end |>Enum.into%{}?谢谢,我会尝试一下。