管道链应该以原始值开始
Pipe chain should start with a raw value
我的 Phoenix 应用程序控制器中有以下操作:
def index(conn, params) do
studios =
if params["search"] do
Studio.search(Studio, params["search"])
else
Studio
end
|> Repo.all
|> Repo.preload(:address)
render conn, studios: studios
end
当我的 运行 mix credo
它 returns 以下警告:
┃ [F] → Pipe chain should start with a raw value.
┃ lib/tattoo_backend/web/controllers/api/v1/studio_controller.ex:21 #(TattooBackend.Web.API.V1.StudioController.index)
我试图重构它,但没有找到让 credo 满意的解决方案。有什么解决办法吗?
if foo do
bar
else
baz
end
等同于if(foo, do: bar, else: baz)
。了解这一点后,您就可以理解错误消息的含义:params["search"]
应该通过管道传输到 if
。这应该修复警告:
def index(conn, params) do
studios =
params["search"]
|> if do
Studio.search(Studio, params["search"])
else
Studio
end
|> Repo.all
|> Repo.preload(:address)
render conn, studios: studios
end
queryable =
if params["search"] do
Studio.search(Studio, params["search"])
else
Studio
end
queryable
|> Repo.all()
|> Repo.preload(:address)
使用模式匹配:
def index(conn, params) do
params
|> search
|> Repo.all()
|> Repo.preload(:address)
end
defp search(%{"search" => search}) do
Studio.search(Studio, search)
end
defp search(_), do: Studio
我的 Phoenix 应用程序控制器中有以下操作:
def index(conn, params) do
studios =
if params["search"] do
Studio.search(Studio, params["search"])
else
Studio
end
|> Repo.all
|> Repo.preload(:address)
render conn, studios: studios
end
当我的 运行 mix credo
它 returns 以下警告:
┃ [F] → Pipe chain should start with a raw value.
┃ lib/tattoo_backend/web/controllers/api/v1/studio_controller.ex:21 #(TattooBackend.Web.API.V1.StudioController.index)
我试图重构它,但没有找到让 credo 满意的解决方案。有什么解决办法吗?
if foo do
bar
else
baz
end
等同于if(foo, do: bar, else: baz)
。了解这一点后,您就可以理解错误消息的含义:params["search"]
应该通过管道传输到 if
。这应该修复警告:
def index(conn, params) do
studios =
params["search"]
|> if do
Studio.search(Studio, params["search"])
else
Studio
end
|> Repo.all
|> Repo.preload(:address)
render conn, studios: studios
end
queryable =
if params["search"] do
Studio.search(Studio, params["search"])
else
Studio
end
queryable
|> Repo.all()
|> Repo.preload(:address)
使用模式匹配:
def index(conn, params) do
params
|> search
|> Repo.all()
|> Repo.preload(:address)
end
defp search(%{"search" => search}) do
Studio.search(Studio, search)
end
defp search(_), do: Studio