2009-05-05 15 views
317

ActiveRecordオブジェクトからクラス名を取得するにはどうすればよいですか?Rubyクラスの名前はどのように取得できますか?

私が持っている:

result = User.find(1) 

私が試した:

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

私は、文字列(この場合はUser)で、クラス名のみを必要とします。そのための方法はありますか?

これはかなり基本的ですが、私はRailsとRubyの両方のドキュメントを検索しましたが、見つけられませんでした。

+1

@Oliver Nを使用し、 'オブジェクト#1 class.inspect'は、オブジェクト#1 class.name''と同じになりますActiveRecordオブジェクトの場合 –

答えて

604

あなたは、オブジェクトのクラスに.nameを呼びたい:

result.class.name 
+3

私はこれを行う前にモジュール名を取得するので、 "Module :: SubModule :: Class"は "Class"を取得する方法です –

+22

@Abe: 'result.class.name.split( ':: ').last' –

+72

@Abe:さらにクリーナー(ActiveSupport): 'result.class.name.demodulize' – pseidemann

31

両方result.class.to_sresult.class.name仕事を。

+28

概念的に#nameは名前を返します。#to_sは文字列表現を返します。その名前とまったく同じになります。私は#nameを使用することに固執します。ちょうど肛門保持力からです。 – kch

87

Daniel Rikowskiとpseidemannのコメントから抜粋した正解です。私は

...正しい答えを見つけるために、コメントを通じて雑草することの疲れているあなたはRailsの(activesupportの)を使用している場合:

result.class.name.demodulize 

あなたはPOR(プレーンオール・ルビー)を使用する場合:

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

私の場合、result.class.nameのようなものを使用すると、Module1::class_nameのようなものがあります。これがないのに対し、しかし、我々は唯一のclass_nameをしたい場合は、通常のRubyオブジェクトで:

result.table_name.singularize

関連する問題