2017-11-20 8 views
2

in meinem Controller habe ich current_company und `current_user. Der Benutzer muss die aktuelle Firma mit jeder Anfrage senden.DRYing der Controller in Phoenix

Also dachte ich, der Benutzer muss es in der Kopfzeile senden.

so in einer Anfrage habe ich Token (JWT) und Firma. Jetzt in meinem Controller habe ich

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

den ich die current_user dann in meiner Funktion Anruf am Extrahieren: def show(conn, %{"id" => id}, current_user) do Ich benutze es, jetzt muß ich company = conn.assigns.current_company nutzen, um aktuelle Unternehmen in jeder Funktion zu erhalten.

Alle funktionieren gut, ich wollte sehen, ob es eine DRY-Lösung gibt, wie die, die ich für den current_user gemacht habe, also muss ich nicht alles über meinen Controller wiederholen.

Dank

+1

Fügen Sie einfach 'conn.assigns.current_company' hinzu, wenn Sie' apply' aufrufen? – Dogbert

+0

Meinst du das so: 'apply (__ MODUL__, aktionsname (conn), [conn, conn.params, conn.assigns.current_user, conn.assigns.current_company]'? –

+0

Ja, funktioniert es nicht für dich? – Dogbert

Antwort

3

Sie können eine beliebige Anzahl von Begriffen zur Liste hinzufügen, die Sie als letztes Argument zu apply passieren. apply wird die relevante Funktion mit so vielen Argumenten wie in dieser Liste aufrufen. So können Sie:

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

und dann alle Aktionsfunktionen in diesem Modul ändern, um 4 Argumente zu akzeptieren. Der vierte wird jetzt der aktuelle Unternehmenswert sein.

Verwandte Themen