如何在方法内部调用时避免多个redirect_to

时间:2012-01-27 21:03:06

标签: ruby-on-rails ruby ruby-on-rails-3 redirect

我对rails有一点问题,我希望能够做这样的事情以避免多次重定向:

def render_not_found
  not_found
end

private

  def not_found
    redirect_to website_url(@website), :status => 301 and return return
  end

return return当然不起作用!

使用:rails 3.2.0

2 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点。一种方法是定义和引发自定义错误,并有一个处理程序在发生时重定向。

application_controller.rb

Class ApplicationController < ActionController::Base

  around_filter :catch_errors

  def catch_errors
    yield
  rescue SiteNotFoundError
    redirect_to website_url(@website), :status => 301
  rescue ActiveRecord::RecordNotFound
    render 404
  rescue ...
    ...
    ...
  end
end

class SiteNotFoundError < StandardError; end
控制器中的

def your_action
  raise SiteNotFoundError if (some condition)
end

或在过滤器之前

before_filter :ensure_valid_site

def ensure_valid_site
  raise SiteNotFoundError if ....
end

答案 1 :(得分:0)

我通常会在before_filters中将错误重定向到错误。

但如果你真的想这样做,你可以这样做......但我警告你 它不漂亮。

def render_not_found
  not_found(binding)
end

private

def not_found(b)
  redirect_to website_url(@website), :status => 301
  b.eval('return')
end