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 die Dokumente von Rails als auch die von Ruby durchsucht und konnte sie nicht finden.
Sie möchten . Name für die Klasse des Objekts aufrufen:
result.class.name
Hier ist die richtige Antwort, extrahiert aus den Kommentaren von Daniel Rikowski und Pseidemann. Ich habe es satt, Kommentare durchzublättern, um die richtige Antwort zu finden ...
Wenn Sie Rails (ActiveSupport) verwenden:
result.class.name.demodulize
Wenn Sie POR (plain-ol-Ruby) verwenden:
result.class.name.split('::').last
Beide result.class.to_s
und result.class.name
Arbeit.
Wenn Sie einen Klassennamen aus einer Klassenmethode abrufen möchten, class.name
oder self.class.name
funktioniert nicht. Diese geben nur Class
aus, da die Klasse einer Klasse Class
ist. Stattdessen können Sie einfach name
verwenden:
module Foo
class Bar
def self.say_name
puts "I'm a #{name}!"
end
end
end
Foo::Bar.say_name
ausgabe:
I'm a Foo::Bar!
In meinem Fall, wenn ich etwas wie result.class.name
Ich habe so etwas wie Module1::class_name
. Aber wenn wir nur wollen, class_name
, verwenden
result.class.table_name.singularize
Sie können die class
-Methode verwenden, um die Klasse eines beliebigen Objekts in Ruby abzurufen.
z.B.
array= []
=> []
array.class
=> Array
hash = {}
=> {}
hash.class
=> Hash
string = 'This is String'
=> "This is String"
string.class
=> String