Jak mogę uzyskać nazwę klasy z obiektu ActiveRecord?
Mam:
result = User.find(1)
Próbowałem:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Potrzebuję tylko nazwy klasy w ciągu znaków ( User
w tym przypadku). Czy istnieje na to metoda?
Wiem, że to dość proste, ale przeszukałem zarówno dokumenty Railsów, jak i Ruby, i nie mogłem tego znaleźć.
Object#class.inspect
daje to samo, coObject#class.name
, podczas gdy nie dotyczy to obiektów ActiveRecord.Odpowiedzi:
Chcesz wywołać nazwę .name w klasie obiektu:
źródło
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
wydaje się również działać.Oto poprawna odpowiedź, wyodrębniona z komentarzy Daniela Rikowskiego i pseidemanna. Jestem zmęczony przeglądaniem komentarzy w celu znalezienia właściwej odpowiedzi ...
Jeśli używasz Railsów (ActiveSupport):
Jeśli używasz POR (zwykły-ol-Ruby):
źródło
Zarówno
result.class.to_s
iresult.class.name
praca.źródło
Jeśli chcesz uzyskać nazwę klasy z metody klasowej
class.name
lubself.class.name
nie będzie działać. Będą one po prostu generowaćClass
, ponieważ jest klasą klasyClass
. Zamiast tego możesz po prostu użyćname
:wynik:
źródło
W moim przypadku, gdy używam czegoś takiego
result.class.name
, mam coś takiegoModule1::class_name
. Ale jeśli tylko chcemyclass_name
, użyjresult.class.table_name.singularize
źródło