Я сделал нечто подобное, что может быть полезно людям, которые все еще заинтересованы
class ApplicationController < ActionController::Base
before_filter :check_maintenance_mode
protected
def check_maintenance_mode
temp_var = self.class.to_s.split("::").first
return if temp_var.casecmp("admin") == 0 || temp_var.casecmp("activeadmin") == 0
if site_setting.maintenance_mode
redirect_to maintenance_path unless request.fullpath.include?(maintenance_path)
else
redirect_to root_path if request.fullpath.include?(maintenance_path)
end
end
end
Во-первых, я разделил имя класса, чтобы получить имя модуля или имя контроллера, к которому я обращаюсь, и я выйду из метода, если попаду в зону администратора. Вы не хотите, чтобы страница обслуживания влияла на модуль администратора
Во-вторых, я проверяю режим обслуживания и, если это так, я перенаправлю пользователей на страницу обслуживания ЕСЛИ они уже находятся на самой странице. Если режим обслуживания не включен, пользователи будут перенаправлены обратно на root_path
Кстати, я использую activeadmin в качестве своей страницы администратора. Надеюсь, что это поможет кому-то в 2015 году.