Wie kann ich den Klassennamen von einem ActiveRecord-Objekt erhalten?
Ich habe:
result = User.find(1)
Ich habe es versucht:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Ich brauche nur den Klassennamen in einer Zeichenfolge ( User
in diesem Fall). Gibt es dafür eine Methode?
Ich weiß, dass dies ziemlich einfach ist, aber ich habe sowohl Rails 'als auch Rubys Dokumente durchsucht und konnte es nicht finden.
ruby-on-rails
ruby
rails-activerecord
und ich
quelle
quelle
Object#class.inspect
dasselbe anObject#class.name
, während dies bei ActiveRecord-Objekten nicht der Fall ist.Antworten:
Sie möchten .name für die Klasse des Objekts aufrufen :
quelle
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
scheint auch zu funktionieren.Hier ist die richtige Antwort, extrahiert aus den Kommentaren von Daniel Rikowski und Pseidemann. Ich bin es leid, Kommentare durchgehen zu müssen, um die richtige Antwort zu finden ...
Wenn Sie Rails (ActiveSupport) verwenden:
Wenn Sie POR (Plain-Ol-Ruby) verwenden:
quelle
Beides
result.class.to_s
undresult.class.name
Arbeit.quelle
Wenn Sie einen Klassennamen aus einer Klassenmethode abrufen möchten
class.name
oderself.class.name
nicht funktionieren. Diese werden nur ausgegebenClass
, da die Klasse einer Klasse istClass
. Stattdessen können Sie einfach Folgendes verwendenname
:Ausgabe:
quelle
In meinem Fall, wenn ich so etwas benutze, habe
result.class.name
ich so etwas wieModule1::class_name
. Aber wenn wir nur wollenclass_name
, verwenden Sieresult.class.table_name.singularize
quelle