我如何获得Ruby类的名称?

时间:2009-05-05 18:13:36

标签: ruby-on-rails ruby rails-activerecord

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

我有:

result = User.find(1)

我试过了:

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

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

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

5 个答案:

答案 0 :(得分:673)

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

result.class.name

答案 1 :(得分:99)

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

如果您使用Rails(ActiveSupport):

result.class.name.demodulize

如果你使用POR(普通红宝石):

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

答案 2 :(得分:33)

result.class.to_sresult.class.name都有效。

答案 3 :(得分:5)

如果您想从类方法中获取类名,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 :(得分:1)

在我的情况下,当我使用类似result.class.name的内容时,我得到的内容类似于Module1::class_name。但如果我们只想要class_name,请使用

result.class.table_name.singularize