Witam
Potrzebne mi sa zmienne z sesji na poziomie klasy np:
class Admin::PanelsController < ApplicationController
@@name = session[:user].name
def index
# ...
end
end
Pokazuje mi blad “undefined local variable or method `session’ for Admin::PanelsController:Class”
Czy jest do zrobienia odczyt sesji na poziomie klasy?
Http jest protokołem bezstanowym, dlatego to, co robisz nie ma sensu. Nie masz dostępu do sesji na poziomie klasy - jedyne co mógłbyś zrobić, to zapisać coś na zmienną @@name podczas jakiegoś requestu (ale to też nie jest moim zdaniem dobry pomysł).
Większość podstawowych technik jest opisana w ruby on rails guides. Proponuję tam zaglądać zanim coś będziesz robił (i nie chodzi nawet o to, że wtedy nie będziesz musiał pytać na forum, tylko, że unikniesz oczywistych błędów, gdy na forum nie zapytasz, a coś dziwnym trafem zadziała, mimo że będzie napisane kompletnie na opak).
Podany przeze mnie przyklad, to jest to co chce uzyskac, albo w sposob inny tzn: na poziomie ApplicationController:
class ApplicationController < ActionController::Base
@@name = session[:user].name
#...
end
Chodzi mi o to by stworzyc zmienna majaca zawartosc sesji, jednak by byla widziala na poziomie klasy.
class Admin::PanelsController < ApplicationController
#...
end
Tylko przeczytaj opis ;)[/quote]
Kurcze, ale na forum to nie można posłuchać, dopiero autorytet zza granicy musi podpowiedzieć, że to jest ZŁY pomysł, co już od kilku postów próbuje się tu tłumaczyć ;).
BTW: _duszek, jeśli pytanie brzmi po co chcesz mieć te dane w zmiennej klasowej, to odpowiedź mniej więcej “bo chcę mieć dane w zmiennej klasowej” nie jest zbyt pomocna
Ok, macie racje. Zapytalem niepoprawnie i mam niepoprawne widzenie (moze to po latach pisania na innym jezyku
Zapytam teraz juz najprosciej (osobna sciezka dla kazdego uzytkownika):
class Admin::PanelsController < ApplicationController
include TinymceFm::Filemanager
image_save_into_public_subdir "images/" + session[:user].name.to_s
#...
def index
#...
end
end
Jak to rozwiazac?
Tak na przyszłość, class variables @@ mogą nadpisać jakieś inne zmienne klasowe o tej samej nazwie, niekoniecznie tam gdzie tego chcesz. Zamiast nich lepiej używać class instance variables @