2017-04-15 12 views
1

すべてがrubyのオブジェクト/クラスである場合、エラーの原因となるクラス/オブジェクトの名前をRubyで教えてください。奇妙なクラス名で定義されていないメソッドエラー

私は <Class:0x00000009a4fa70>:0x00000009814558>は基本的に何を意味するのかを知りたい
undefined method `changed_servings?' for #<#<Class:0x00000009a4fa70>:0x00000009814558>): 

...

+1

を書くことができます。 –

+2

これは、一般に、 'Class.new'を使用して動的に作成されたいくつかのクラスから生成され、クラスを何らかの定数にバインドすることなく(クラスの名前を付けて)生成されます。 –

答えて

2

通常、Rubyは不足している方法はあり、そのクラスの名前を与えます。たとえば、私がirbにいて、不完全なメソッドを作成し、インスタンス化して呼び出した場合、RubyはRailsよりも詳細を教えてくれます。

class Widget 
    def initialize 
    @widget = 42 
    end 
end 

それから私は、クラスをインスタンス化:

test = Widget.new 

私は新しく作られたオブジェクトとクラス名のIDを取り戻す:

#<Widget:0x007f850982f560 @widget=42> 

そして、私はあるメソッドを呼び出す場合ウィジェットの一部ではありません:

test.no_method 

私はIRBから素敵なメッセージが表示されます。

NoMethodError: undefined method `no_method' for #<Widget:0x007f850982f560 @widget=42> 

が、バックレールに...私は、特に理由は、多分理由はRailsのMVCはアーキテクチャ・される方法の、クラスの実際の名前が残されているか分かりませんオブジェクトIDだけがエラーメッセージに与えられます。

私は映画のアプリを作っている、と私はアプリ/ビュー/モデル/ show.html.erb中だと私のような存在しないメソッドを呼び出す場合:う

<% no_method %> 

マイアプリ私は最初のIDは、オブジェクトのモデルIDに関連付けされ、第二は、オブジェクトのビューIDですが、私は完全にそのことについて推測しているベットを賭けます

undefined local variable or method `no_method' for #<#<Class:0x007fb9a51553b8>:0x007fb9a4951c48> 

:次のメッセージと、爆発します。しかし、それだけで未定義のメソッドのエラー・メッセージの上に、あなたにエラーが私の場合には、から来たファイルパスを与えるそのメッセージ上記の情報はされてい:任意のレートで

NoMethodError in Movies#index 

、あなたも検索を行うことができますあなたのビューテンプレートでは、その中断メソッドとそれを見つける必要があります。希望が役立ちます。

0

次のように書きます。

class C 
end 

C.class_method 
    #=> NoMethodError: undefined method `class_method' for C:Class 
c = C.new 
    #=> #<C:0x007fe12bd1eb10> 
c.instance_method 
    # NoMethodError: undefined method `instance_method' for #<C:0x007fe12bd1eb10> 

驚きはありません。同じことをやろうが、匿名のクラスを動的に作成してみましょう。

klass = Class.new 
    #=> #<Class:0x007fe12bce5720> 
klass.class_method 
    #=> NoMethodError: undefined method `class_method' for #<Class:0x007fe12bce5720> 
k = klass.new 
    #=> #<#<Class:0x007fe12bce5720>:0x007fe12bcc4fc0> 
k.instance_method 
    #=> NoMethodError: undefined method `instance_method' for 
    # #<#<Class:0x007fe12bce5720>:0x007fe12bcc4fc0> 

ありがとうございます!

ところで、あなたは動的にクラスを作成することができますし、thuslyそれに名前を割り当てます。

Object.const_set 'C', Class.new 
    #=> C 

だから今、あなたは私たちに、このエラーの原因となっているコードを表示

C.class_method 
    #=> NoMethodError: undefined method `class_method' for C:Class 
C.new.instance_method 
    #=> NoMethodError: undefined method `instance_method' for #<C:0x007fe12bc766e0> 
関連する問題