所以我的背景是Java,你可以这样创建一个类。
TestClass x = new TextClass();
,并像
x.shout ();我试图在ruby中做一些类似的事情,没有这样的外观。这可能是语法问题,也可能是我不太理解ruby和rails的概念。
服务器上有一个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中对象的概念已经被打破了。有谁能告诉我哪里做错了吗?
Ruby类总是大写的。此外,在类中声明常规方法时也不引用self。
这是你想要的:
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