wake-up-neo.net

Wie erhalte ich den Namen einer Ruby Klasse?

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.

371
andi

Sie möchten . Name für die Klasse des Objekts aufrufen:

result.class.name
690
flicken

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
108
Darren Hicks

Beide result.class.to_s und result.class.name Arbeit.

33
tal

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!
6
jayhendren

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

2
Chivorn Kouch

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 
2
MR. A