ActiveRecordオブジェクトからクラス名を取得する方法を教えてください。
私は持っています:
result = User.find(1)
私は試した:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
クラス名だけが文字列で必要です(この場合はUser
)。そのための方法はありますか?
これはかなり基本的なことですが、Railsの文書とRubyの文書の両方を検索しましたが、見つかりませんでした。
オブジェクトのクラスで 。name を呼び出します。
result.class.name
これが正しい答えです。Daniel Rikowskiとpseidemannによるコメントから抜粋したものです。私は正しい答えを見つけるためにコメントを通して雑草をしなければならないことにうんざりしています...
Rails(ActiveSupport)を使用している場合
result.class.name.demodulize
POR(plain-ol-Ruby)を使っているのなら:
result.class.name.split('::').last
result.class.to_s
とresult.class.name
の両方が機能します。
クラスメソッド内からクラス名を取得したい場合は、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!
class
メソッドを使用して、Rubyの任意のオブジェクトのクラスを取得できます。
例えば.
array= []
=> []
array.class
=> Array
hash = {}
=> {}
hash.class
=> Hash
string = 'This is String'
=> "This is String"
string.class
=> String
私の場合はresult.class.name
のようなものを使うとModule1::class_name
のようなものが得られます。 class_name
だけが欲しい場合は、
result.class.table_name.singularize