如何从过滤器类访问flash和redirect_to

时间:2010-06-21 18:03:57

标签: ruby-on-rails

我正在尝试将一个类用作多个控制器的前置过滤器。因为过滤器必须根据哪个控制器调用它来做稍微不同的事情,所以我似乎需要使用一个类作为过滤器,以便将控制器传入过滤器。

到目前为止,我有类似

的内容
class ShowFilter
def self.filter(controller)
  c_name = controller.controller_name
  object_id = controller.params[:id]
  case c_name
    when "articles"
      article = Article.find(object_id)
      unless curr_user.can_see?(article)
        controller.redirect_to(:controller => "articles", :action => "index")
      end
    when "images"
      image = Image.find(object_id)
      unless curr_user.can_see?(image)
        controller.redirect_to(:controller => "images", :action => "index")
      end
  end
end

此类将在文章 images 控制器中的 show 操作上调用为:before_filter。

我的问题是我收到一条错误消息,说'redirect_to'是一个受控制器传入过滤器的受保护方法。

如果我打电话

redirect_to(:controller => "images", :action => "index")

而不是

controller.redirect_to(:controller => "images", :action => "index")

我得到一个“未定义的方法'redirect_to'用于ShowFilter:Class”错误。

如果我将我的班级定义为

class ShowFilter < ApplicationController

我仍然遇到未定义的方法错误。我也有同样的问题访问闪存。

有没有办法在过滤器类内重定向?我应该使用不同的方法进行过滤,以便能够重定向和访问闪存吗?

1 个答案:

答案 0 :(得分:1)

您可以使用controller.send(:redirect_to,“您的网址”)来绕过该方法的受保护级别。