我有一个User与之有has_many关系的模特other_model.我有一个Search搜索互联网的功能.我想做的是只在has_many关系不是空数组的情况下搜索互联网.
所以我想知道我是否可以针对非空数组进行模式匹配?正如您在下面看到的,Search嵌套分支中的额外结果因此我使用该with语句并希望获得一个干净的解决方案.
query = from a in Model, where: a.id == ^id, preload: [:some_associations]
with %{some_associations: some_associations} <- Repo.one(query),
{:ok, some_results} <- Search.call(keywords, 1) do
do_something_with(some_associations, some_results)
else
nil -> IO.puts "query found nothing"
{:error, reason} -> IO.puts "Search or query returned error with reason #{reason}"
end
Run Code Online (Sandbox Code Playgroud)
Dog*_*ert 15
您可以使用该模式[_ | _]匹配非空列表:
{:ok, some_results = [_ | _]} <- Search.call(keywords, 1)
Run Code Online (Sandbox Code Playgroud)
iex(1)> with xs = [_|_] <- [1, 2, 3] do {:ok, xs} else _ -> :error end
{:ok, [1, 2, 3]}
iex(2)> with xs = [_|_] <- [] do {:ok, xs} else _ -> :error end
:error
Run Code Online (Sandbox Code Playgroud)