work with rescue in Rails work with rescue in Rails ruby ruby

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.