W moim Rails 3.1 app (z Ruby 1.9), mam Deployer1 klasy, która jest w pracownika podkatalogu poniżej modelu kataloguJak dynamicznie ładować klasę przy użyciu przestrzeni nazw/podkatalogu w Ruby/Rails?
próbuję załadować/instancję tej klasy dynamicznie z tego Kod:
clazz = item.deployer_class # deployer_class is the class name in a string
deployer_class = Object.const_get clazz
deployer = deployer_class.new
Gdybym nie nazw stosowania, np coś takiego: globalny
class Deployer1
end
Następnie działa poprawnie (deployer_class = "Deployer1") - może załadować klasę i utworzyć obiekt.
Gdy próbuję i umieścić go w module do niego nieco przestrzeni nazw tak:
module Worker
class Deployer1
end
end
nie robi praca (deployer_class = „Pracownik :: Deployer1”) - daje błąd o brakującym stała, co, jak sądzę, oznacza, że nie może znaleźć klasy.
mogę otworzyć klasę generalnie w moim kodu Rails w sposób statyczny (Worker :: Deployer1.new) - tak Rails jest poprawnie skonfigurowany, aby załadować ten, być może wczytuję to w niewłaściwy sposób ...
EDIT: tak, jak za odpowiedź Vlada, rozwiązanie poszedłem na to:
deployer_class.constantize.new
Dzięki Chris
Dzięki Vlad - właśnie tego potrzebowałem. –