2017-11-20 26 views
2

でコントローラを乾燥私はcurrent_companyと `CURRENT_USERを持っています。ユーザーはすべてのリクエストに応じて現在の会社を送信する必要があります。私のコントローラでフェニックス

だから私は、ユーザーがヘッダーにそれを送信する必要がある、と思いました。

ので、一つのリクエストで、私はトークン(JWT)と会社を持っています。今、私は、各機能で、現在の会社を得るために company = conn.assigns.current_companyを使用する必要があり、私はそれを使用def show(conn, %{"id" => id}, current_user) do:今、私のコントローラで私は私の関数呼び出しで、その後current_userを抽出しています

def action(conn, _) do 
    apply(__MODULE__, action_name(conn), 
     [conn, conn.params, conn.assigns.current_user]) 
    end 

を持っています。

すべてが正常に動作している、私はCURRENT_USERのために私は私のコントローラ上でそれをすべてを繰り返す必要はありませんでしたようなDRY解決策があるかどうかを確認したかったです。

おかげ

+1

'apply'を呼び出すときに' conn.assigns.current_company'をそのリストに追加するだけですか? – Dogbert

+0

あなたはこのように意味するか?: 'はい__ MODULE__、ACTION_NAME(CONN)、 [CONN、conn.params、conn.assigns.current_user、conn.assigns.current_company]' –

+0

(適用それはあなたのために動作しません – Dogbert

答えて

3

あなたはapplyの最後の引数として渡すリストに用語の任意の数を追加することができます。 applyは、そのリストと同じ数の引数で関連する関数を呼び出します。

apply(__MODULE__, action_name(conn), 
    [conn, conn.params, conn.assigns.current_user, conn.assigns.current_company]) 

をして、4つの引数を受け入れるようにそのモジュール内のすべてのアクション関数を変更:だから、あなたが行うことができます。 4番目のものが現在の会社価値になります。