我目前定义了以下方法:
def create_user(attrs \\ %{}) do
%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
end
此方法返回的值如下:
{
:ok,
%{
model: %Udia.Accounts.User{...},
version: %PaperTrail.Version{...}
}
}
如何重写此链,只返回模型值?我想访问%App.Accounts.User{...}
中的所有属性而无需进一步嵌套。
答案 0 :(得分:2)
如果您希望在值不存在时返回nil,则可以输入Map.fetch!/2
(或Map.get/2
):
%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
|> Map.fetch!(:model)
编辑:对于新代码,如果您只想使用管道,则可以执行以下操作:
%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
|> elem(1)
|> Map.fetch!(:model)
但我还建议使用以下模式匹配解决方案,该解决方案还检查返回值的第一个元素是:ok
而不是其他内容:
{:ok, %{model: model}} =
%User{}
|> user_registration_changeset(attrs)
|> PaperTrail.insert()
model