Dan*_*per 4 ruby redirect ruby-on-rails
我想设置一些内容,以便在我的应用程序中的帐户被禁用时,我希望将所有请求重定向到"已禁用"消息.
我在我的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
Run Code Online (Sandbox Code Playgroud)
当然,如果帐户未处于活动状态,则进入无限循环时,这不会很有效.我希望使用类似的东西:
redirect_to :controller => "main", :action => "disabled" and return if !$account.active? && @controller.controller_name != "main" && @controller.action_name != "disabled"
Run Code Online (Sandbox Code Playgroud)
但我注意到在Rails v2.1(我正在使用的)中,@ console现在是控制器,这似乎在ApplicationController中不起作用.
实现这样的事情最好的方法是什么?
你有几个选择.
如果您的操作方法"已禁用"在应用程序范围内唯一命名,则可以向before_filter调用添加例外,如下所示:
before_filter :check_account, :except => :disabled
Run Code Online (Sandbox Code Playgroud)
如果要专门检查过滤器中的控制器和操作,应注意此代码已经是控制器对象的一部分.您可以将其称为"自我",如下所示:
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
Run Code Online (Sandbox Code Playgroud)
最后,如果您愿意,可以在MainController.rb中覆盖过滤器方法:
def check_account
return if action_name == "disabled"
super
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |