提问



如何从ActiveRecord对象获取类名?


我有:


result = User.find(1)


我试过了:


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


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


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

最佳参考


你想在对象的类上调用.name:[20]


result.class.name

其它参考1


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


如果您使用Rails(ActiveSupport):


result.class.name.demodulize


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


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

其它参考2


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

其它参考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


在我的情况下,当我使用像result.class.name之类的东西时,我得到了类似Module1::class_name的东西。但如果我们只想要class_name,请使用


result.table_name.singularize