392 ActiveRecordオブジェクトからクラス名を取得するにはどうすればよいですか? 私が持っています: result = User.find(1) 私は試した: result.class # => User(id: integer, name: string ...) result.to_s # => #<User:0x3d07cdc>" 文字列で(Userこの場合は)クラス名だけが必要です。その方法はありますか? これはかなり基本的なことはわかっていますが、RailsとRubyの両方のドキュメントを検索しましたが、見つかりませんでした。 ruby-on-rails ruby rails-activerecord — そして私 ソース 1 @Oliver N .:通常のRubyオブジェクトの場合Object#class.inspectはと同じですがObject#class.name、ActiveRecordオブジェクトの場合は異なります。 — Andrew Grimm
732 オブジェクトのクラスで.nameを呼び出します: result.class.name — ちらつく ソース 4 私はこれを行うと、私はその前にモジュール名を取得するので、「モジュール::サブモジュール::クラス」、単に「クラス」取得の方法がある — 阿部Petrillo 25 @阿部:result.class.name.split('::').last — Daniel Rikowski、2011年 90 @阿部:さらにすっきり(ActiveSupport):result.class.name.demodulize — pseidemann 2 初心者には、次のようなクラスを使用して、クラス名を文字列として取得することもできますUser.name。User.to_sまた動作するようです。 — Dan Polites、2012年 demodulizeメソッドはここから取得します:apidock.com/rails/ActiveSupport/Inflector/demodulize (Railsプロジェクトでない場合に使用できるようにするには、ActiveSupport文字列屈折をロードする必要があります。) — Per Lundberg
118 これが正解です。ダニエルリコウスキーとプセイデマンのコメントから抜粋したものです。私は正しい答えを見つけるためにコメントを取り除かなければならないことにうんざりしています... Rails(ActiveSupport)を使用する場合: result.class.name.demodulize POR(plain-ol-Ruby)を使用する場合: result.class.name.split('::').last — ダレンヒックス ソース
34 両方result.class.to_sとresult.class.name仕事。 — タル ソース 34 ただし、概念的には、#nameは名前を返し、#to_sは文字列表現を返します。これはたまたま名前と同じです。私は#nameの使用に固執します。 — 2009
7 クラスメソッド内からクラス名を取得する場合、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! — ジェイヘンドレン ソース
3 私の場合のように、私は何かを使用するときにresult.class.name、私のようなものを得ましたModule1::class_name。しかし、必要なだけの場合はclass_name、 result.class.table_name.singularize — チボーン・クウチ ソース
Object#class.inspect
はと同じですがObject#class.name
、ActiveRecordオブジェクトの場合は異なります。