Come posso ottenere il nome di una lezione di Ruby?
-
05-07-2019 - |
Domanda
Come posso ottenere il nome della classe da un oggetto ActiveRecord?
Ho:
result = User.find(1)
Ho provato:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Ho bisogno solo del nome della classe, in una stringa ( User
in questo caso). C'è un metodo per quello?
So che è piuttosto semplice, ma ho cercato i documenti di Rails e Ruby e non sono riuscito a trovarlo.
Soluzione
Desideri chiamare .name sulla classe dell'oggetto :
result.class.name
Altri suggerimenti
Ecco la risposta corretta, estratta dai commenti di Daniel Rikowski e pseidemann. Sono stanco di dover esaminare i commenti per trovare la risposta giusta ...
Se si utilizza Rails (ActiveSupport):
result.class.name.demodulize
Se usi POR (plain-ol-Ruby):
result.class.name.split('::').last
Entrambi result.class.to_s
e result.class.name
funzionano.
Se vuoi ottenere un nome di classe dall'interno di un metodo di classe, class.name
o self.class.name
non funzionerà. Questi genereranno solo Class
, poiché la classe di una classe è Class
. Invece, puoi semplicemente usare name
:
module Foo
class Bar
def self.say_name
puts "I'm a #{name}!"
end
end
end
Foo::Bar.say_name
uscita:
I'm a Foo::Bar!
Nel mio caso quando uso qualcosa come result.class.name
ho qualcosa come Module1 :: class_name
. Ma se vogliamo solo class_name
, usa
result.class.table_name.singularize