2011-07-13 8 views
1

私はJavaのバックグラウンドから、クラスを作成することができます。インスタンス化されたクラス(Ruby/Rails)でメソッドが見つかりません

TestClass x = new TextClass(); 

とx.shout()などのメソッドを呼び出します。

私はルビーのような外観で何か似たようなことをしようとしています。これは構文的かもしれないし、ルビーとレールのコンセプトもよく理解できないかもしれない。

ルビー

class myResource< ActiveResource::Base 
    self.site = "http://localhost:3008" 
    def self.shout 
    puts "I AM AN ACTIVE RESOURCE SHOUT!" 
    puts " CAPS RAGE YEAH!" 
    puts Time.now 
    end 
end 

内のサーバー上だから、HERESにクラスがこれは、クライアント側に座っています。

相続人は、サーバー上でアクティブなレコードと同じクラス:だからHERESに

class myRecord < ActiveRecord::Base 
    def self.shout 
    puts "I AM AN ACTIVE RECORD SHOUT!" 
    puts " CAPS RAGE YEAH!" 
    puts Time.now 
    end 

end 

私が試みられてきたものの結果。レールコンソールでサーバーで

:私の心には、クライアント側では

?> myRecord.shout 
I AM AN ACTIVE RECORD SHOUT! 
CAPS RAGE YEAH! 
Wed Jul 13 10:17:33 +0100 2011 
=> nil 
>> 

しかし、

myResource.shout 
NoMethodError: undefined method `shout' for myResource:Class 
    from (irb):206 
>> 

これは彼らのほとんど同じようも意味がありません、そのように呼ばれるべきです。私は

test.shout @を書くとき

は、私は同じ未定義のメソッドを取得

@test = myResource or myRecord.new(blah blah blah) 

としてそれらのいずれかをインスタンス化した場合。

Rubyのオブジェクトが何であるかという私の考えが吹かれました。私がここで間違っていることについて誰もが助言をしています。

+0

あなたのコードは全く動作しないはず

はこれが何をしたいです。クラス名は大文字で始まる必要があります。 – Dogbert

+0

@dogbert。こんにちは。あなたの漫画が大好きです。元のクラスは大文字で始まります。私はこの質問を書いて突っ込んでいたし、そのことを知らなかった。謝罪 – OVERTONE

答えて

2

Rubyクラスは常に大文字になります。また、クラス内で通常のメソッドを宣言しているときには、自分自身を参照しません。

class MyRecord 

    def shout 
     puts "I AM AN ACTIVE RECORD SHOUT!" 
     puts "CAPS RAGE YEAH!" 
     puts Time.now 
    end 

end 

は、その後、あなたが欲しいしかし、それを実行します:

> MyRecord.new.shout 
=> "I AM AN ACTIVE RECORD SHOUT!" 
=> "CAPS RAGE YEAH!" 
=> 2011-07-13 06:35:18 -0400 
+0

それで、それは自己のビットだった!それは私の愚かだった。ありがとう! – OVERTONE

+0

NP :) 'def method.self'はモジュール内のシングルトンメソッドに使用されます。あなたがミックスインを持っていると、それはより意味をなさないでしょう。 – s84

+0

私は自己メソッドが(インスタンスメソッドではなく)クラスメソッドであるという印象を受けましたか? – jaydel

関連する問題