Как реализовать редирект всех запросов (на определенных условиях)?

голоса
3

Я хочу, чтобы создать что-то так, что если учетная запись в моем приложении отключена, я хочу, чтобы все запросы будут перенаправляться на «инвалид» сообщение.

Я установил это в моем 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.

Что было бы лучшим способом реализовать что-то подобное?

Задан 18/09/2008 в 03:42
источник пользователем
На других языках...                            


4 ответов

голоса
6

У вас есть несколько вариантов.

Если ваш метод действия «отключено» однозначно назван в рамках приложения, вы можете добавить исключение для вызова 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
Ответил 18/09/2008 в 04:02
источник пользователем

голоса
3

Кроме того, можно использовать skip_before_filterдля одного контроллера / методы вы не хотите , чтобы фильтр обратиться.

Ответил 18/09/2008 в 05:56
источник пользователем

голоса
1

Как насчет первого избавлении от этой глобальной переменной $ учетной записи. Вы в основном настраиваете себя для некоторых серьезных ошибок с помощью глобальной. Просто используйте переменный экземпляр вместо @ или еще лучше создать метод на ApplicationController называется current_account, который доступ к @current_account переменного экземпляра.

Ответил 18/09/2008 в 20:07
источник пользователем

голоса
0

Если Тереза ​​не слишком много переопределяет тогда просто поставить, если в перенаправлении фильтра

если действие! = отключено редирект () конец

Ответил 18/09/2008 в 04:01
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more