我如何得到Ruby类的名称?

如何从ActiveRecord对象获取类名? ruby

我有: ide

result = User.find(1)

我试过了: spa

result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"

我只须要字符串中的类名(在本例中为User )。 有没有办法呢? 3d

我知道这是很是基本的,但我搜索了Rails和Ruby的文档,我找不到它。 code


#1楼

这是正确答案,摘自Daniel Rikowski和pseidemann的评论。 我厌倦了经过评论来寻找合适的答案...... 对象

若是您使用Rails(ActiveSupport): 文档

result.class.name.demodulize

若是你使用POR(普通红宝石): 字符串

result.class.name.split('::').last

#2楼

在个人状况下,当我使用相似result.class.name东西时,我获得了相似Module1::class_name东西。 可是若是咱们只想要class_name ,请使用 get

result.class.table_name.singularize string


#3楼

若是要从类方法中获取类名,则class.nameself.class.name将不起做用。 这些只会输出Class ,由于类的类是Class 。 相反,您能够使用name

module Foo
  class Bar
    def self.say_name
      puts "I'm a #{name}!"
    end
  end
end

Foo::Bar.say_name

输出:

I'm a Foo::Bar!

#4楼

您能够使用class方法获取ruby中任何对象的类。

例如

array= [] 
     => []
     array.class
     => Array

     hash = {}
     => {}
     hash.class
     => Hash

     string = 'This is String'
     => "This is String"
     string.class
     => String

#5楼

你想在对象的类上调用.name

result.class.name
相关文章
相关标签/搜索