2009-05-05 103 views
317

我怎样才能得到一个ActiveRecord对象的类名?我如何获得Ruby类的名称?

我:

result = User.find(1) 

我想:

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

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

我知道这是非常基本的,但我找遍两个轨和Ruby的文档,我找不到它。

+1

@Oliver n:正常的Ruby对象,`对象#class.inspect`给出了同样的`对象#class.name`,而这是不ActiveRecord对象的情况。 – 2011-08-09 23:53:06

回答

604

你想打电话.name对对象的类:

result.class.name 
+3

当我做到这一点我之前得到的模块名称,因此“模块::子模块::班”,有没有想起来了“类” – 2011-09-02 11:35:02

+22

@Abe的方式:`result.class.name.split(':: “).last` – 2011-10-01 10:40:30

31

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

87

这里的正确答案,由丹尼尔Rikowski和pseidemann评论提取。我厌倦了通过评论剔除找到正确的答案...

如果您使用的Rails(的ActiveSupport):

result.class.name.demodulize 

如果使用POR(纯醇 - 红宝石):

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

在我的情况下,当我使用类似result.class.name的东西时,我得到了类似Module1::class_name的东西。但是,如果我们只希望class_name,使用

result.table_name.singularize

相关问题