Comment puis-je obtenir le nom de classe à partir d'un objet ActiveRecord?
J'ai:
result = User.find(1)
J'ai essayé:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Je n'ai besoin que du nom de classe, dans une chaîne ( User
dans ce cas). Y a-t-il une méthode pour cela?
Je sais que c'est assez basique, mais j'ai recherché les documents de Rails et Ruby, et je n'ai pas pu le trouver.
Object#class.inspect
donne la même chose queObject#class.name
, alors que ce n'est pas le cas avec les objets ActiveRecord.Réponses:
Vous souhaitez appeler .name sur la classe de l'objet:
la source
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
semble également fonctionner.Voici la bonne réponse, extraite des commentaires de Daniel Rikowski et pseidemann. J'en ai assez de devoir parcourir les commentaires pour trouver la bonne réponse ...
Si vous utilisez Rails (ActiveSupport):
Si vous utilisez POR (plain-ol-Ruby):
la source
Les deux
result.class.to_s
et leresult.class.name
travail.la source
Si vous souhaitez obtenir un nom de classe à l'intérieur d'une méthode de classe,
class.name
ouself.class.name
ne fonctionnera pas. Ceux-ci ne feront que sortirClass
, puisque la classe d'une classe l'estClass
. Au lieu de cela, vous pouvez simplement utilisername
:production:
la source
Dans mon cas, lorsque j'utilise quelque chose comme,
result.class.name
j'ai quelque chose commeModule1::class_name
. Mais si nous voulons seulementclass_name
, utilisezresult.class.table_name.singularize
la source