Vra

Ek wil iets op te rig sodat as 'n rekening binne my jeug is afgeskakel, ek wil alle versoeke om herlei word na 'n "gestremde" boodskap.

Ek het hierdie opstel in my 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

Natuurlik is dit nie heeltemal werk as dit gaan in 'n oneindige lus as die rekening is nie aktief. Ek het gehoop om so iets te gebruik:

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

maar ek het opgemerk dat in Rails v2.1 (wat ek gebruik), @controller is nou kontroleerder en dit lyk nie te werk in ApplicationController.

Wat sou die beste manier om so iets te implementeer?

Was dit nuttig?

Oplossing

Jy kan ook 'n skip_before_filter gebruik vir die een kontroleerder / metode wat jy wil nie hê die filter van toepassing op.

Ander wenke

Jy het 'n paar opsies.

As jou optrede metode "gestremde" is uniek in die omvang van die aansoek genoem, jy kan 'n uitsondering toe te voeg tot die before_filter oproep, soos volg:

before_filter :check_account, :except => :disabled

As jy wil spesifiek gaan vir die kontroles en aksie in die filter, moet u daarop let dat hierdie kode is reeds deel van die beheerder voorwerp. Jy kan verwys na dit as "self," soos 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

Ten slotte, as jy wil, kan jy die filter metode oorskryf van binne MainController.rb:

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

Hoe gaan dit met die eerste om ontslae te raak van daardie globale $ rekening veranderlike. Jy is basies die opstel van jouself vir 'n paar ernstige foute deur die gebruik van 'n globale. gebruik net 'n geval veranderlike in plaas @ of beter nog 'n metode te skep op ApplicationController genoem current_account wat toegang tot die @current_account byvoorbeeld veranderlike.

As Theres nie te veel oorheers dan net sit die as in die aanstuur filter

As aksie! = Gestremde   lei () einde

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top