Como posso obter o nome da classe de um objeto ActiveRecord?
Eu tenho:
result = User.find(1)
Eu tentei:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Eu preciso apenas do nome da classe, em uma string ( User
neste caso). Existe um método para isso?
Sei que isso é bastante básico, mas procurei nos documentos do Rails e do Ruby e não consegui encontrá-lo.
Object#class.inspect
dá o mesmo queObject#class.name
, embora esse não seja o caso com objetos ActiveRecord.Respostas:
Você deseja chamar .name na classe do objeto:
fonte
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
também parece funcionar.Aqui está a resposta correta, extraída dos comentários de Daniel Rikowski e pseidemann. Estou cansado de ter que procurar nos comentários para encontrar a resposta certa ...
Se você usa o Rails (ActiveSupport):
Se você usa o POR (plain-ol-Ruby):
fonte
Ambos
result.class.to_s
eresult.class.name
trabalho.fonte
Se você deseja obter um nome de classe de dentro de um método de classe,
class.name
ouself.class.name
não vai funcionar. Isso apenas produziráClass
, pois a classe de uma classe éClass
. Em vez disso, você pode apenas usarname
:resultado:
fonte
No meu caso, quando eu uso algo como
result.class.name
eu tenho algo parecidoModule1::class_name
. Mas se apenas queremosclass_name
, useresult.class.table_name.singularize
fonte