Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 返回elixir中地图/词典的子集?_Dictionary_Elixir_Subset - Fatal编程技术网

Dictionary 返回elixir中地图/词典的子集?

Dictionary 返回elixir中地图/词典的子集?,dictionary,elixir,subset,Dictionary,Elixir,Subset,我目前定义了以下方法: def create_user(attrs \\ %{}) do %User{} |> user_registration_changeset(attrs) |> PaperTrail.insert() end 此方法返回的值如下所示: { :ok, %{ model: %Udia.Accounts.User{...}, version: %PaperTrail.Version{...} } } 如何重写此链,

我目前定义了以下方法:

def create_user(attrs \\ %{}) do
  %User{}
  |> user_registration_changeset(attrs)
  |> PaperTrail.insert()
end
此方法返回的值如下所示:

{
  :ok,
  %{
     model: %Udia.Accounts.User{...},
     version: %PaperTrail.Version{...}
   }
}

如何重写此链,以便只返回模型值?我想访问
%App.Accounts.User{…}
中的所有属性,无需进一步嵌套。

您可以通过管道进入
Map.fetch/2
(或
Map.get/2
如果不存在值,则返回nil):

编辑:对于新代码,如果只想使用管道,可以执行以下操作:

%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
|> elem(1)
|> Map.fetch!(:model)
但我还建议使用以下模式匹配解决方案,它还可以检查返回值的第一个元素是否为
:ok
,而不是其他元素:

{:ok, %{model: model}} =
  %User{}
  |> user_registration_changeset(attrs)
  |> PaperTrail.insert()
model

您可以通过管道进入
Map.fetch/2
(或
Map.get/2
如果不存在值,则返回nil):

编辑:对于新代码,如果只想使用管道,可以执行以下操作:

%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
|> elem(1)
|> Map.fetch!(:model)
但我还建议使用以下模式匹配解决方案,它还可以检查返回值的第一个元素是否为
:ok
,而不是其他元素:

{:ok, %{model: model}} =
  %User{}
  |> user_registration_changeset(attrs)
  |> PaperTrail.insert()
model

对不起,我原来的问题弄错了。返回的值不是映射,而是
{:ok,%{…}
。谢谢你的时间,我为此增加了两条建议。对不起,我在原来的问题中犯了一个错误。返回的值不是映射,而是
{:ok,%{…}
。谢谢你的时间,我为此增加了两条建议。