web-dev-qa-db-ja.com

Rubyクラスの名前をどうやって取得するのですか?

ActiveRecordオブジェクトからクラス名を取得する方法を教えてください。

私は持っています:

result = User.find(1)

私は試した:

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

クラス名だけが文字列で必要です(この場合はUser)。そのための方法はありますか?

これはかなり基本的なことですが、Railsの文書とRubyの文書の両方を検索しましたが、見つかりませんでした。

364
andi

オブジェクトのクラスで 。name を呼び出します。

result.class.name
676
flicken

これが正しい答えです。Daniel Rikowskiとpseidemannによるコメントから抜粋したものです。私は正しい答えを見つけるためにコメントを通して雑草をしなければならないことにうんざりしています...

Rails(ActiveSupport)を使用している場合

result.class.name.demodulize

POR(plain-ol-Ruby)を使っているのなら:

result.class.name.split('::').last
102
Darren Hicks

result.class.to_sresult.class.nameの両方が機能します。

33
tal

クラスメソッド内からクラス名を取得したい場合は、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!
5
jayhendren

classメソッドを使用して、Rubyの任意のオブジェクトのクラスを取得できます。

例えば.

     array= [] 
     => []
     array.class
     => Array

     hash = {}
     => {}
     hash.class
     => Hash

     string = 'This is String'
     => "This is String"
     string.class
     => String 
2
MR. A

私の場合はresult.class.nameのようなものを使うとModule1::class_nameのようなものが得られます。 class_nameだけが欲しい場合は、

result.class.table_name.singularize

1
Chivorn Kouch