Frage

Ich möchte etwas so einrichten, dass, wenn ein Konto in meiner App deaktiviert ist, ich möchte, dass alle Anforderungen an einen „gesperrt“ Nachricht umgeleitet werden.

Ich habe dies in meiner Application einrichten:

class ApplicationController < ActionController::Base
  before_filter :check_account

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

Natürlich tut dies nicht ganz funktioniert, wie es in einer Endlos-Schleife geht, wenn das Konto nicht aktiv ist. Ich hatte gehofft, etwas zu verwenden, wie:

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

, aber ich bemerkte, dass in Rails v2.1 (was ich verwende), @controller ist jetzt Controller und dies scheint nicht in Application zu arbeiten.

Was wäre der beste Weg, um so etwas zu implementieren?

War es hilfreich?

Lösung

Sie können auch eine skip_before_filter für den einen Controller / Methode verwenden Sie nicht wollen, die Filter haben, gelten.

Andere Tipps

Sie haben mehrere Möglichkeiten.

Wenn Ihre Aktion-Methode „disabled“ eindeutig in den Rahmen der Anwendung mit dem Namen ist, können Sie eine Ausnahme von der before_filter Anruf hinzufügen, wie folgt aus:

before_filter :check_account, :except => :disabled

Wenn Sie speziell für den Controller und die Aktion im Filter überprüfen möchten, sollten Sie beachten, dass dieser Code bereits Teil des Controller-Objekt ist. Sie können es als verweisen „Selbst“, etwa so:

  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

Schließlich, wenn Sie möchten, können Sie die Filtermethode aus MainController.rb überschreiben:

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

Wie wäre es erste dieser globalen Account Variable $ loszuwerden. Sie setzen im Grunde selbst für einige schwerwiegende Fehler, indem sie einen globalen verwenden. Verwenden Sie einfach eine Instanz Variable statt @ oder besser noch eine Methode erstellen, die auf Application current_account genannt, die die @current_account Instanzvariable zugreifen.

Wenn Theres nicht zu viele Überschreibungen dann setzen Sie einfach die, wenn in den Redirect-Filter

, wenn action! = Disabled   umleiten() Ende

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top