Rails beenden den Controller nach dem Rendern

7

Ich habe eine Aktion in meinem Controller, mit der ich Probleme habe. Dies ist meine erste Rails-App, daher bin ich mir der Best Practices für Rails nicht sicher.

Ich habe ein Modell namens Gruppe und ein paar Aktionen, die in den Controller gehen. Ich habe einen Test geschrieben, der dazu führen sollte, dass der Controller aufgrund einer ungültigen Gruppen-ID einen Fehler in JSON rendert. Anstatt zu rendern und zu beenden, sieht es so aus, als würde der Controller rendern und weiter ausführen.

Test

%Vor%

Controller-Aktion

%Vor%

Im Controller wird die erste if-Anweisung ausgeführt: render :json => { :message => "group_id not found" } aber @group.destroy wird noch ausgeführt. Das scheint mir nicht intuitiv zu sein, ich würde denken, dass die Rendermethode den Controller verlassen sollte.

Warum wird der Controller nicht beendet, nachdem render aufgerufen wurde?

Der Zweck dieses Codeblocks besteht darin, ordnungsgemäß wiederherzustellen, wenn mit der übergebenen ID kein Datensatz gefunden werden kann. Ist das der richtige Weg, so etwas zu tun?

    
codysehl 11.11.2012, 16:57
quelle

2 Antworten

15

Wie @ user1022209 sagte, können Sie eine Rückkehr zum Beenden der Aktion hinzufügen:

%Vor%

Über deinen Code denke ich würde ich so schreiben:

%Vor%     
Thanh 11.11.2012, 19:09
quelle
7

Fügen Sie einfach return; nach render hinzu, um den Methodenrumpf zu verlassen:)

Ich denke, render ist nur ein Methodenaufruf, Sie nennen ihn, und die Methode wird auf den Stapel gelegt, der die Ausführungsreihenfolge der Methode enthält. Nachdem Sie render beendet haben, kehren Sie zur Methode remove zurück und führen die Ausführung der verbleibenden Methode fort. Sie können dieses Problem jedoch vermeiden, indem Sie die Methode remove

manuell beenden

    
code4j 11.11.2012 17:00
quelle

Tags und Links