Метод не найден в экземпляре класса (Ruby / Rails) - PullRequest
1 голос
/ 13 июля 2011

Итак, я пришел из Java-среды, где вы можете создать класс как таковой.

TestClass x = new TextClass();

и вызвать его метод как x.shout ();

Я пытаюсь сделать что-то подобное в ruby ​​без такого взгляда. Это может быть синтаксическим, или я плохо понимаю концепцию рубина и рельсов.

Итак, вот класс на сервере в Ruby

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

Это сидит на стороне клиента.

Здесь тот же класс, что и у активной записи на сервере:

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

end

Итак, вот результат того, что я пытался.

На сервере в консоли rails:

?> 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 = myResource or myRecord.new(blah blah blah)

когда я пишу @ test.shout

Я получаю тот же неопределенный метод.

Моя идея о том, что представляет собой объект в Ruby, была взорвана. Есть кто-нибудь какой-нибудь совет о том, что я делаю здесь неправильно.

1 Ответ

2 голосов
/ 13 июля 2011

Классы 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
...