Ich habe eine Aktion in meinem Controller, mit dem ich Probleme habe. Dies ist meine erste Rails-App, daher bin ich mir der Best Practices für Rails nicht sicher.Schienen beenden Controller nach dem Rendern
Ich habe ein Modell namens Gruppe und ein paar Aktionen, die in seinem 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
test 'should not remove group because of invalid group id' do
post(:remove, {'group_id' => '3333'})
response = JSON.parse(@response.body)
assert_response :success
assert_equal 'Success', response['message']
end
Controller-Aktion
# Post remove
# group_id
def remove
if((@group = Group.find_by_id(params[:group_id])) == nil)
render :json => { :message => "group_id not found" }
end
@group.destroy
if(!Group.exists?(@group))
render :json => { :message => "Success" }
else
render :json => { :errors => @group.errors.full_messages }
end
end
In der Steuerung, die erste if-Anweisung ausführt: render :json => { :message => "group_id not found" }
aber @group.destroy
noch ausgeführt werden wird. Das scheint mir nicht intuitiv zu sein, ich würde denken, dass die Rendermethode den Controller verlassen sollte.
Warum wird die Steuerung nicht beendet, nachdem render
aufgerufen wurde?
Der Zweck dieses Codeblocks besteht darin, ordnungsgemäß wiederherzustellen, wenn kein Datensatz mit der übergebenen ID gefunden werden kann. Ist das der richtige Weg, so etwas zu tun?
Ausgezeichnet. Hinzufügen einer Rendite hat super funktioniert. – codysehl