423

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

我有:

result = User.find(1)

我试过:

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

我只需要字符串中的类名(User在这种情况下)。有没有办法呢?

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

4

5 回答 5

785

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

result.class.name
于 2009-05-05T18:15:23.580 回答
128

这是从 Daniel Rikowski 和 pseidemann 的评论中提取的正确答案。我厌倦了不得不通过评论来找到正确的答案......

如果您使用 Rails (ActiveSupport):

result.class.name.demodulize

如果您使用 POR (plain-ol-Ruby):

result.class.name.split('::').last
于 2014-07-18T19:21:09.920 回答
38

result.class.to_sresult.class.name工作。

于 2009-05-05T20:47:45.850 回答
9

如果您想从类方法中获取类名,class.name否则self.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!
于 2018-04-12T20:01:45.860 回答
1

就我而言,当我使用类似的东西时,result.class.name我得到了类似的东西Module1::class_name。但如果我们只想class_name使用

result.class.table_name.singularize

于 2017-12-06T06:39:13.370 回答