moduł niezależny od aplikacji

Mam moduł który includuje w ApplicationController, chcę teraz żeby w self.included(base) tego modelu wyciągnąć requesta. Próbowałem to zrobić przy wykorzystaniu zmiennej base, ale base to ApplicationController:Class. Próbowałem sprawdzać jakie są metody/zmienne w tej klasie ale nie znalazłem sposobu na dostanie się do requesta takiego jaki jest w ApplicationController.

Cel: Chciałbym uniknąć wywołania before_filter.

Nie możesz dostać się do requesta na poziomie klasy, przy obsłudze requesta tworzona jest nowa instancja kontrolera.

Możesz zrobić: base.skip_before_filter :foo

To dokładniej, mam taką sytuację:

[code=ruby]class ApplicationController < ActionController::Base
include ModulA
before_filter :test

def test
modula_test(request)
end
end

module ModulA
def modula_test(request)

end
end[/code]
Chciałbym aby w application controller było jak najmniej kodu zależnego od tego modułu, tzn. includuje moduł a on później sam wykonuje z automatu odpowiednie akcje. Czyli żeby w module self.included.(base) uzyskać dostęp do requesta z którego to potrzebuje uzyskanie dostepu do params i do session z requesta, jak również do request jest mi potrzebny do SubdomainFu

module ModulA def self.included(base) //tutaj nie mogę uzyskać dostępu do requesta tego samogo co mam w ApplicationController ? end end

[quote=drogus]Nie możesz dostać się do requesta na poziomie klasy, przy obsłudze requesta tworzona jest nowa instancja kontrolera.

Możesz zrobić: base.skip_before_filter :foo[/quote]
raczej base.before_filter :foo :slight_smile:

albo jeszcze inaczej

base.class_eval do
before_filter :foo
end

a to ja nie zrozumiałem chyba tego “uniknąć wywołania before_filter”

@wafcio: dalej nie do końca rozumiem co chcesz uzyskać. Jeżeli chodzi o included, to ten kod jest wykonywany podczas ładowania klasy, więc nie ma szansy, żeby tam dostać się do czegoś, co jest dostępne już podczas działania aplikacji.

problem już rozwiązałem:

w self.included(base) wpisuję base.send :include, IntanceMethods a w metodach znajdujących się w module InstaceMethods mam już dostęp do zmiennej request.

[code=ruby]module ModulA
def self.included(base)
base.send :include, InstanceMethods
#tutaj wywołuje before filter na metodę w InstanceMathods
end

module InstanceMethods
def test
#tutaj już mam dostęp do zmiennej request
end
end
end[/code]
Problem więc jest już rozwiązany, dzięki za wskazówki.