2010-06-12 43 views
0

在我的Rails應用程序,我習慣了使用語法像在許多地方,包括助手/ application_helper.rb如下:鏈接在Ruby中你自己的方法on Rails的

def my_method(x,y) 
    return x+y 
end 

我也習慣從調用我的應用程序使用的語法像這樣基本的任何地方產生的方法:

my_method(2,3) 

不過,我希望能夠使用的語法像這樣:

class_from_my_rails_app.my_method(3) 

如何以及在哪裏定義my_method,以便我可以像這樣使用它?

我很樂意查閱文檔,但我不知道後者的風格是什麼。你怎麼稱呼它?

非常感謝,

史蒂文。

+0

我不明白:爲什麼'class_from_my_rails_app.my_method'調用中只有一個整數? – alternative 2010-06-12 22:29:44

+0

你可以在你的例子中省略'return'。方法中的最終表達式自動成爲返回值。 – 2010-06-12 22:43:42

+0

Mathepic,有一個調用,因爲我想象這會像my_string.truncate(20),它從my_string和其他參數從括號中的「文本」。抱歉不清楚。 – 2010-06-13 09:01:27

回答

1

你想創建的東西叫做實例方法。實現如下:

class YourClass 

    def initalize(x) 
    @x =x 
    end 

    def do_something(y) 
    @x + y 
    end 

end 

,你會使用如下:

my_class = YourClass.new(20) 

puts my_class.do_something(10) 
=> 30 

但其實這是很基本面向對象編程和紅寶石,我很驚訝地甚至看到這個問題。

我建議閱讀紅寶石作爲一種語言,一本非常好的書讓你開始是The Well-grounded Rubyist,從所有的基礎開始,它的工作方式到所有的細節。

我希望這會有所幫助。如果我誤解了你的問題,我很抱歉,並且很樂意詳細說明任何部分。

+0

謝謝。這正是我所期待的。我也會看看這本書,希望這將繼續成爲一個地方,我們這些對Rails陌生的人可以繼續尋找答案,因爲我們深入Ruby的基本原理。 – 2010-06-13 23:20:42

+0

很高興有幫助。 – nathanvda 2010-06-14 07:10:17

1

我想你正在討論創建類方法。

class MyClass 
    def self.my_method(x,y) 
    return x+y 
    end 
end 

這使您可以撥打

MyClass.my_method(2,3) 

這可能屬於一個模型類,而不是一個輔助類,軌道明智的。

+0

謝謝。我想象了更多的new_instance = MyClass.new然後new_instance.my_method,其中x和Y中至少有一個來自new_instance,而不是通過圓括號輸入。如果這有道理?就好像我在my_string.truncate(20)中發明了「truncate」,它從my_string中抓取「text」,而從括號中抓取其他參數。 – 2010-06-13 09:00:11