2009-05-05 145 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

相關問題