Ruby-on-rails – How to stop controller execution after using redirect_to? (Using Rails)


I have a controller with multiple actions that take :year and :month as
attributes from the URL. I have made a private method check_date to
check the date is valid and check the date is not in the future.

def check_date(year, month)
  if month < 1 || month > 12 || year < 2000
    flash[:notice] = I18n.t 'archive.invalid_date'
    redirect_to :action => 'index'
  elsif year > || (year == && month >
    flash[:notice] = I18n.t 'archive.no_future'
    redirect_to :action => 'month_index', 
      :year =>, 
      :month =>,
      :type => params[:type]

Is there a rails way of ending controller execution after the

Ways I can think of are either to throw an exception after the redirect_to or to return a value from check_date and check it in each action that calls it – something like

def month_index 
  year = params[:year].to_i
  month = params[:month].to_i
  if !check_date(year, month)

But I wonder if there is some nice rails way of doing this. I was half
hoping that having called redirect_to rails would recognise I wanted to
stop, but that doesn't seem to happen.

Best Solution

You can also do:

return redirect_to :action => 'index'


return redirect_to :action => 'month_index', 
  :year =>, 
  :month =>,
  :type => params[:type]

since it looks nicer than putting return on its own line (IMHO).