Enums 枚举Elixir数据,包括嵌套,并在EEx中显示键/VAL?

Enums 枚举Elixir数据,包括嵌套,并在EEx中显示键/VAL?,enums,elixir,phoenix-framework,Enums,Elixir,Phoenix Framework,我有一个Phoenix应用程序,我需要在EEx/HTML中显示用户的配置文件,但每个用户的配置文件都有不同的字段,包括嵌套数据 如果每个用户的配置文件都有相同的字段,这将很简单,因为我可以直接将它们打印到EEx中,但由于每个用户都有不同的配置文件,所以我无法匹配字段 我正在寻找循环查看用户数据的最佳方法,包括嵌套属性,并逐行显示EEx中的键/值 用户数据如下所示: [closed: :null, created: "2015-10-10T00:51:11.611Z", email: "emai

我有一个Phoenix应用程序,我需要在EEx/HTML中显示用户的配置文件,但每个用户的配置文件都有不同的字段,包括嵌套数据

如果每个用户的配置文件都有相同的字段,这将很简单,因为我可以直接将它们打印到EEx中,但由于每个用户都有不同的配置文件,所以我无法匹配字段

我正在寻找循环查看
用户
数据的最佳方法,包括嵌套属性,并逐行显示EEx中的键/值

用户数据如下所示:

[closed: :null, created: "2015-10-10T00:51:11.611Z",
 email: "email@gmail.com",
 id: "user-1234", name: "Rbin",
 profile: %{"something" => 2,
   "laptop" => %{"age" => 2, "price" => "High", "size" => "13",
     "type" => "Macbook", "working" => true}, "silly" => "properties"},
 sessions: %{"type" => "list",
   "url" => "/user-1234/sessions"}, type: "user",
 url: "/users/user-1234", username: "rbin"]

列出多个用户很容易,因为我可以理解列表并使用
为用户递归迭代用户。您可以在视图模块中为此创建一个函数,这将使您能够在模板内进行递归调用。如果获得映射,它将应用模板,否则只返回值(这将结束递归调用)

然后,在模板中确保再次调用
dump_nested
函数,因为这可能包含嵌套映射。请注意,在进行递归调用时,需要向下传递
fun
参数,以便
dump\u nested
函数仍然可以引用模板

<%= dump_nested user, fn(attributes, fun) -> %>
  <dl>
    <%= for {key, value} <- attributes do %>
      <dt><%= key %></dt>
      <dd><%= dump_nested value, fun %><dd>
    <% end %>
  </dl>
<% end %>
%>
e、 g


我的嵌套贴图位于嵌套列表中,因此我必须测试并通过列表。这是一篇了解Phoenix的视图/模板过程的好文章

  def dump_nested(input, fun) when is_list(input) do
    Enum.map(input, fn el -> __MODULE__.dump_nested(el, fun) end)
  end

  def dump_nested(%{} = attributes, fun) do
    fun.(attributes, fun)
  end

  def dump_nested(value, _fun) do
    value
  endcode here

这是完美的,只需稍加调整。非常感谢!你介意分享一下吗?这可能会帮助其他阅读本文的人,我也可能从中学到一些东西:)干杯
defmodule Nested do

def get_inner_element(input) do
Enum.at(input,0) 
|> __MODULE__.get_map(["config","accessConfigs"] )  # we can pass list here for deep nested
|>Enum.at(0) 
|> __MODULE__.get_element_from_map("natIP")
end
def get_map(map,[head|tail])  do
 map[head] |> get_map tail 
end

def get_map(map,[]),  do: map 

def get_element_from_map(map,key) do
map[key]
end
end
input = [%{"config" => %{"accessConfigs" => [%{"kind" => 
"compute#accessConfig","name" => "External NAT", "natIP" => "146.148.23.208",
"type" => "ONE_TO_ONE_NAT"}]}}]

IO.inspect Nested.get_inner_element(input)
  def dump_nested(input, fun) when is_list(input) do
    Enum.map(input, fn el -> __MODULE__.dump_nested(el, fun) end)
  end

  def dump_nested(%{} = attributes, fun) do
    fun.(attributes, fun)
  end

  def dump_nested(value, _fun) do
    value
  endcode here