2013-11-21 4 views
11

Ich weiß, dass mit dem folgenden Code:wie eine Aktion auszuführen, wenn die before_action false zurück

before_action :signed_in?, only: [:new]

die Aktion new wenn die signed_in? true zurück ausgeführt wird, sondern wenn ich will die new Aktion ausgeführt werden, wenn signed_in? false zurückgibt, was muss ich tun? Muss ich eine neue Methode erstellen, z. B. not_signed_in??

Hier ist meine signed_in? Methode

def signed_in? 
    [email protected]_user.nil? 
end 
+0

Sind Sie sicher, dass es nicht ausgeführt wird, wenn 'signed_in?' 'false' zurückgibt? Warum sollte es das tun? –

+0

Was ist das Ziel von 'before_action'? Soll die Ausführung einer Aktion blockiert werden, wenn sie false zurückgibt? – zer0uno

+0

Nein. Sein Zweck ist es, etwas vorzubereiten, bevor Ihre Methode ausgeführt wird. –

Antwort

15

before_action funktioniert nicht, wie Sie denken - es verhindert nicht, Aktion, die ausgeführt werden, wenn Rückruf false zurückgibt. Ich würde Ihr Problem in einem etwas anderen Art und Weise, zum Beispiel lösen:

before_action :redirect_to_root, :if => :signed_in?, :only => :new 

# ... 
private 
def redirect_to_root 
    redirect_to root_path 
end 
+0

Ja, du hast recht. Danke p.s. pozdrawiaj jakub jalbzykowski ode mnie! ;) – zer0uno

+0

@antox LOL woher kennst du Jakub? Und woher weißt du, dass ich ihn kenne? :) Facebook? : P –

+0

FB kennt alles! :) Wie kann ich ihn kennen? Uuu, es ist eine lange Geschichte, vielleicht könnte er es dir sagen – zer0uno

7
before_action :new, unless: -> { signed_in? } 

alltough Ich denke, es ist besser, in der Aktion zu umleiten, die aufgerufen wurde.

def your_action_called 
    redirect_to :new unless signed_in? 
    [...code ...] 
end 
+0

der obige Lambda Weg funktioniert nicht – ahnbizcad

0

Wenn Sie alle anderen Methoden mit
before_action :signed_in?
außer neue Aktion abdecken wollen, you'b besser :except zu verwenden, anstatt :only
wie folgt:
before_action :signed_in?, except: :new

Verwandte Themen