Odczyt zmiennych sesji na poziomie klasy

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” :frowning:
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).

http://guides.rubyonrails.org/action_controller_overview.html#accessing-the-session

Napisz może co dokładnie chcesz uzyskać, bo pewnie jest na to jakiś lepszy sposób.

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

Ale po co Ci koniecznie zmienna na poziomie klasy? :slight_smile: Spojrzałeś w ogóle w te guidesy? Podaj jakiś konkretny rodzaj użycia Twojego pomysłu.

[code]class ApplicationController < ActionController::Base

protected

def user_name
@user_name ||= session[:user_name]
end
end[/code]

Pewnie żeby użyć sesji w modelu :wink:

Wlasnie :slight_smile:

To stare, ale powinno działać: http://m.onkey.org/how-to-access-session-cookies-params-request-in-model

Tylko przeczytaj opis :wink:

[quote=drogus]To stare, ale powinno działać: http://m.onkey.org/how-to-access-session-cookies-params-request-in-model

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 :smiley:

Po angielsku brzmi mądrzej.

Ok, macie racje. Zapytalem niepoprawnie i mam niepoprawne widzenie (moze to po latach pisania na innym jezyku :frowning:
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 @

@_duszek

W takich wypadkach najlepiej spojrzeć na implementację: https://github.com/galdomedia/tinymce_filemanager/blob/master/lib/tinymce_filemanager.rb

Jak tam spojrzysz, to zobaczysz metodę instancji images_folder, która bierze wartość ustawioną w image_save_into_public_subdir albo ‘images’.

Dlatego powinno wystarczyć jak nadpiszesz tą metodę w kontrolerze, mniej więcej tak:

[code]class FooController < ApplicationController

private

def images_folder
“images/#{session[:user]}”
end
end[/code]

O to mi chodzilo, wielkie dzieki!