我对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
答案 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