Uzywanie pundita z zasobami w przestrzeni nazw

mam kontroler w namespace “admin”, w podfolderze ‘admin’. W ten sam sposób grupuję policies pundita, policy dla usera wygląda tak

class Admin::UserPolicy < AdminPolicy
end

Jednak gdy w kontrolerze używam metody ‘authorize’ dostaję wyjątek

unable to find policy UserPolicy

Na zdrowy chłopski rozum widać że pundit o prostu szuka UserPolicy a ja mam Admin::UserPolicy , co mam zrobić żeby on rozpoznawał ten namespace?

Spróbuj dodać w kontrolerze:

require_dependency "app/policies/admin/user_policy"

jeśli dodam to co napisałeś do kontrolera, i wywalę “Admin::” z deklaracji klasy (ale nie plik z folderu admin), dostaję błąd superclass mismatch for class UserPolicy i już kompletnie nie wiem co się dzieje:)

UPDATE

dobra, to jednak działa, tylko mam wrażenie że dość chałupniczo. błąd ‘superclass mismatch…’ ktory wymienilem powyżej wyskakuje za każdym razem gdy coś zmienię w AdminPolicy lub UserPolicy i musze wtedy restartować serwer żeby załapał zmiany:/

Błąd z przeładowaniem klas zagnieżdżonych jest dość częsty, gdy pracujesz środowisku deweloperskim. Na produkcyjnym nie powinien występować, bo klasy ładują się przed startem aplikacji.

Pewnie korzystasz gdzieś z dynamicznego generowania klas przy pomocy Struct lub OpenStruct. Tutaj jest rozwiązanie z wykorzystaniem config.to_prepare i config.before_initialize

http://alisdair.mcdiarmid.org/2013/02/02/fixing-rails-auto-loading-for-serialized-objects.html