首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >凤凰控制器动作重构

凤凰控制器动作重构
EN

Stack Overflow用户
提问于 2017-06-27 18:52:13
回答 2查看 68关注 0票数 0

在我的凤凰应用程序控制器中,我有以下操作:

代码语言:javascript
运行
复制
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

有没有任何方法可以重构这段代码以提高可读性?

EN

Stack Overflow用户

发布于 2017-06-27 21:09:09

您可以通过reduce在params上构建更复杂的查询(例如允许有条件地包含地址):

代码语言:javascript
运行
复制
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: studios
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44787782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档