【问题标题】:How to Implement a Redirect on All Requests (on certain conditions)?如何对所有请求实施重定向(在某些条件下)?
【发布时间】:2010-09-10 12:17:57
【问题描述】:

我想进行一些设置,以便如果我的应用中的帐户被禁用,我希望所有请求都被重定向到“禁用”消息。

我已经在我的 ApplicationController 中进行了设置:

class ApplicationController < ActionController::Base
  before_filter :check_account

  def check_account
    redirect_to :controller => "main", :action => "disabled" and return if !$account.active?
  end
end

当然,这并不完全有效,因为如果帐户未激活,它会进入无限循环。我希望使用类似的东西:

redirect_to :controller => "main", :action => "disabled" and return if !$account.active? && @controller.controller_name != "main" && @controller.action_name != "disabled"

但我注意到在 Rails v2.1(我正在使用的)中,@controller 现在是控制器,这在 ApplicationController 中似乎不起作用。

实现这样的事情的最佳方式是什么?

【问题讨论】:

    标签: ruby-on-rails ruby redirect


    【解决方案1】:

    您有多种选择。

    如果您的操作方法“禁用”在应用程序范围内是唯一命名的,您可以在 before_filter 调用中添加异常,如下所示:

    before_filter :check_account, :except => :disabled
    

    如果你想专门检查过滤器中的控制器和动作,你应该注意这段代码已经是控制器对象的一部分。您可以将其称为“自我”,如下所示:

      def check_account
        return if self.controller_name == "main" && self.action_name == "disabled"
    
        redirect_to :controller => "main", :action => "disabled" and return if !$account.active?
      end
    

    最后,如果你愿意,你可以在 MainController.rb 中覆盖过滤器方法:

      def check_account
        return if action_name == "disabled"
        super
      end
    

    【讨论】:

      【解决方案2】:

      您也可以将skip_before_filter 用于您不想应用过滤器的控制器/方法。

      【讨论】:

      • 我认为这可能是实现它的最干净的方式。谢谢!
      【解决方案3】:

      首先摆脱那个全局变量 $account 怎么样。通过使用全局变量,您基本上是在为一些严重的错误做好准备。只需使用实例变量而不是 @ 或者更好的是在 ApplicationController 上创建一个名为 current_account 的方法,该方法可以访问 @current_account 实例变量。

      【讨论】:

      • 嘿,埃里克,感谢您的提醒。我确信有更好的方法可以做到这一点,我认为 current_account 方法将是一个很好的方法。干杯!
      【解决方案4】:

      如果没有太多覆盖,那么只需将 if 放在重定向过滤器中

      如果操作 != 禁用 重定向() 结束

      【讨论】:

        猜你喜欢
        • 2014-12-09
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多