Mam działanie w moim kontrolerze, z którym mam problem. To jest moja pierwsza aplikacja dla railsów, więc nie jestem pewien najlepszych praktyk związanych z szynami.Sterownik wyjścia Rails po renderowaniu
Mam model o nazwie Group i kilka akcji, które wchodzą w jego kontroler. Napisałem test, który powinien spowodować, że kontroler wygeneruje błąd w JSON z powodu nieprawidłowego identyfikatora grupy. Zamiast renderowania i wychodzenia, wygląda na to, że kontroler renderuje i kontynuuje wykonywanie.
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 działanie
# 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
W regulatorze, pierwszy if wykonuje: render :json => { :message => "group_id not found" }
ale @group.destroy
jest nadal wykonywany. Wydaje mi się to sprzeczne z intuicją, sądzę, że metoda renderowania powinna wyjść z kontrolera.
Dlaczego kontroler nie kończy pracy po wywołaniu render
?
Celem tego bloku kodu jest odzyskanie z wdziękiem, gdy nie można znaleźć rekordu z przekazanym identyfikatorem. Czy to jest właściwy sposób robienia czegoś takiego?
Doskonały. Dodanie zwrotu działało świetnie. – codysehl