2017-06-28 14 views
3

I私のフェニックスアプリのコントローラで、次のアクションを持っている:パイプチェーンは、生の値で始まる必要があり

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はそれが警告以下返します

┃ [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) 

私が試しましたリファクタリングが、私は信念を喜ばせる解決策を見つけられませんでした。任意のアイデアをどのようにこれを解決するには?

+1

方法について:これは警告修正する必要があります|> to_query()| 'paramsは>をRepo.all()|> ...'、 'def to_query({" search "=> search})、do:...と' def to_query(_params)、do:Studio'の二つの定義を持っていますか? –

答えて

3
queryable = 
    if params["search"] do 
    Studio.search(Studio, params["search"]) 
    else 
    Studio 
    end 

queryable 
|> Repo.all() 
|> Repo.preload(:address) 
1
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 
3

用いたパターンマッチング:

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 
+2

私はこれを少し改良して行くつもりです:パターンマッチングですでに得たように、 'params [" search "]'を単に 'search'に変更してください。さもなければ、 'search'変数が使用されていないという警告が表示されます。 – Nagasaki45

+0

ナイスキャッチ@長崎45、ありがとう! –

関連する問題