在我的凤凰应用程序控制器中,我有以下操作:
defmodule TattooBackend.Web.API.V1.StudioController do
use TattooBackend.Web, :controller
alias TattooBackend.Repo
alias TattooBackend.Accounts.Account
def index(conn, params) do
studios = Studio
studios = if params["search"] do
Studio.search(studios, params["search"])
end
studios = studios |> Repo.all |> Repo.preload(:address)
render conn, studios: studios
end
end有没有任何方法可以重构这段代码以提高可读性?
发布于 2017-06-27 21:09:09
您可以通过reduce在params上构建更复杂的查询(例如允许有条件地包含地址):
query =
Enum.reduce(params, Studio, fn
{"search", search_term}, query -> Studio.search(query, search_term)
{"include_address", "true"}, query -> Ecto.Query.preload(query, :address)
# ... additional query building params handled here
_, query -> query # ignore unrecognised params
end)
studios = Repo.all(query)
render conn, studios: studioshttps://stackoverflow.com/questions/44787782
复制相似问题