work with rescue in Rails
All code after the end of the rescue block is interpreted only if there are no returns in the rescue block. So you can call return at the end of your rescue block.
def index begin @user = User.find(params[:id]) rescue flash[:notice] = "ERROR" redirect_to(:action => 'index') return end flash[:notice] = "OK" redirect_to(:action => 'index')end
or
def index @user = User.find(params[:id]) # after is interpret only if no exception before flash[:notice] = "OK" redirect_to(:action => 'index')rescue flash[:notice] = "ERROR" redirect_to(:action => 'index')end
But in your case the better is to use rescue_from or rescue_in_public
like
class UserController < ApplicationController def rescue_in_public(exception) flash[:notice] = "ERROR" redirect_to(:action => 'index') end def index @user = User.find(params[:id]) flash[:notice] = "OK" redirect_to(:action => 'index') endend
But the using of rescue_in_public is not really good advice
Just an overall Rails Rescue answer:
I found this to be very cool:
@user = User.find(params[:id]) rescue ""
If there is no user
with that id
, then User.find
will return nil
. Returning nil
is not an error case and will not trigger a rescue
.