我如何获得Ruby类的名称?

十年热恋 提交于 2020-02-28 03:26:35

如何从ActiveRecord对象获取类名?

我有:

result = User.find(1)

我试过了:

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

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

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


#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 ,请使用

result.class.table_name.singularize


#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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!