将除1之外的所有页面重定向到Rails中的单个临时不可用页面

时间:2014-08-27 07:21:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 routes

我们拥有功能齐全的网站,但后端正在维护,因此我们希望将所有客户重定向到www.example.com/unavailable。除了1页www.example.com/admin,因为这是我们将不可用页​​面打开和关闭的管理页面。

所以我的问题: 是否可以像这样打开和关闭路线:

routes.rb的示例代码:

  if Settings.unavailable
    get "*", to: "/unavailable", except: "/admin"
  end

2 个答案:

答案 0 :(得分:0)

您可以在routes.rb中添加条件,但是您将无法检测当前网址是什么。您应该将此逻辑放在ApplicationController(或其他顶级控制器)中的before_filter中:

class ApplicationController < ActionController::Base
  before_filter :check_maintenance

  def check_maintenance
    if Settings.unavailable && action_name != 'unavailable' # or other conditions
      redirect_to '/unavailable'
    end
  end
end

答案 1 :(得分:0)

在Michal的帖子的帮助下,我调整了他的答案:

class ApplicationController < ActionController::Base
  before_filter :check_maintenance

  def check_maintenance
    if Settings.first.maintenance && request.fullpath.split("?")[0].gsub("/","") != 'unavailable' && (request.fullpath.split("?")[0].exclude? "admin") # or other conditions
      redirect_to '/unavailable'
    end
  end
end