2010-11-10 29 views
1

我有一個很好的一塊功能和測試Ruby代碼,我想融入Rails項目:Rails不是魔術,一種方法在哪裏生活?

require 'open-uri' 

def shorten(url) 
    open("http://is.gd/api.php?longurl=#{url}").read 
rescue 
    nil 
end 

我想打電話從show.html.erb方法縮短(URL)在以下方法:

<% @shorturl = shorten("http://www.google.com/search?q=#{@bands.item.gsub(' ', '+')}+san+francisco") %> 

我認爲把該方法縮短,模型內的工作,但它會導致NoMethodError(在需要「開URI」被放置在application_controller.rb)

undefined method `shorten' for #<ActionView::Base:0x1037e66a8> 

這種方法應該在哪裏存在?我怎樣才能使這個工作?你推薦什麼書或資源會讓Rails看起來不那麼神奇。先謝謝你。

回答

3

我的經驗是:如果該方法處理數據庫數據,最好將其移至Model。即使是處理來自數據庫數據的數據,如果可能的話,也建議將其移動到模型中,以便儘可能具有「精益控制器」和「精益視圖」。

如果該方法通常用於幫助顯示某些內容,則它屬於「幫助程序」...例如,h方法是「幫助查看代碼」的經典示例。您可以將這些方法添加到應用程序幫助程序文件中,即app/helpers/application_helpers.rb

如果不處理視圖並且不處理來自數據庫的數據,那麼您可能會認爲它是該控制器類的一種方法,或者甚至是應用程序控制器的方法,如果它是您的應用程序的中心,並應由所有控制器繼承。

0

動靜能量的答案非常好,所以我只補充一點,如果你想了解一些軌道看看這個免費的在線教程,引導您構建一個Twitter克隆一步一步:http://railstutorial.org/book

數本圖書我讀過說要先學習Rails(包括上面的鏈接),但我認爲這是一個可怕的想法,真的很糟糕的建議。如果你不瞭解Ruby,那麼你不能理解什麼是Rails「魔術」,什麼是標準Ruby。

所以我的建議是先學習Ruby然後學習Rails。這將不那麼令人沮喪和神奇似乎。下面是一些我最喜歡的書籍紅寶石:

Programming Ruby 1.9
Metaprogramming Ruby
Refactoring: Ruby Edition

我愛Pragmatic因爲作者得到更多的錢爲他們的努力,每個人都參與好像真正關心的質量他們的產品。

+3

我真的很想知道什麼混蛋(而不是爲什麼說懦夫)投下了這個答案。那傢伙要求一些好書和資源。投票拒絕這個答案的人顯然討厭知識......和自由......以及小貓和彩虹! – 2010-11-10 08:32:03

+1

這就是爲什麼我不再回答這裏的問題。一些漏洞會圍繞着他們不喜歡或不同意的投票問題。你可以是對的,但如果他們不同意他們會投票。我認爲這是孩子。哦,+1讓我發笑。 – Kludge 2010-11-10 08:39:49

2

那麼,如果它是屬於模型的方法,無論它是一個類方法或實例方法:

類方法

#some controller 
MyModel.method(...) 

#MyModel 
def self.method(...) 
    ... 
end 

實例方法

#some controller 
@myInstance = MyModel.find...(...) 
@myInstance.method(...) 

#MyModel 
def method(...) 
    ... 
end 

如果不是放在任何模型中,我推薦一個助手,比如動靜能說。