Mam nazwę klasy i chcę utworzyć wystąpienie tej klasy, aby móc przechodzić przez każdy atrybut rails obecny w schemacie tej klasy.
Jak bym to zrobił?
- Mam nazwę jako ciąg klasy, którą chcę sprawdzić
- Wydaje mi się, że muszę utworzyć instancję klasy, aby móc
- Przejrzyj jego atrybuty i wydrukuj je.
ruby
ruby-on-rails-3
mhenrixon
źródło
źródło
eval
Odpowiedzi:
W szynach możesz po prostu zrobić:
W czystym rubinie:
z modułami:
użyłbyś
źródło
Object.const_get('Foo::Bar')
to nie zadziała, aconstantize
będzie.clazz = 'Foo::Bar::Uber'
Bardzo proste w Railsach: użyj
String#constantize
źródło
Spróbuj tego:
Następnie, aby przejść przez zmienne instancji obiektu:
źródło
W Ruby 2.0 i prawdopodobnie we wcześniejszych wersjach
Object.const_get
będzie rekurencyjnie wyszukiwać przestrzenie nazw, takie jakFoo::Bar
. Powyższy przykład dotyczy sytuacji, w których przestrzeń nazw jest znana z wyprzedzeniem i podkreśla fakt, żeconst_get
można ją wywoływać bezpośrednio w modułach, a nie wyłącznie naObject
.źródło