2010-01-25 190 views
0

我對Rails很陌生。Rails:控制器和路由

Q1。控制器和視圖之間的路線是什麼?

比方說,我有一個名爲store_controller控制器。我有在控制器中沒有方法,但我有一個名爲「清單」

再來看,我能夠調用本地主機:3000 /存儲/列表...爲什麼我能夠調用此操作而無需在列表行動控制器? Q2302。如果我在控制器中添加如下列表方法會怎麼樣?如果我打電話給localhost:3000/store/list將會是什麼路線?從控制器的列表方法,然後,查看?或首先查看和控制器列表方法?或控制器的列表方法將永遠不會被調用?

def list 
    logger.Write 'list in Controller' 
end 

根據我的測試,控制器的list方法從來沒有被調用。我不知道爲什麼。我正在關注「使用Rails進行敏捷Web開發,第3版」一書,我被困在了「任務C:推車創建」中。

Q3。如何從視圖調用控制器的方法,而無需使用助手或沒有該方法的任何模板文件?假設我在Controller中有一個名爲DoSomething的方法。

def DoSomething 
    logger.Write 'd' 
end 

我可以從下面的視圖調用這個方法嗎?

<%= link_to "Do It", :action => "DoSomething" %> 

根據我的測試,它不起作用。

編輯:其實,視圖可以通過Http Post調用控制器。假設我們在屏幕上看到的是視圖。如果你點擊按鈕,它將會是http-post並且會呼叫控制器。這是我通過調用視圖控制器的方法..

Q4的意思。如何在自定義日誌文件中寫入日誌?如果我使用logger.Write,那麼所有的日誌都會寫入到development.log中。我如何擁有自定義日誌文件?

Q5。有沒有什麼辦法像Ruby和Rails中的調度程序一樣創建?如果我想創建類似調度程序或後端工作的應用程序,我應該使用Ruby還是Rails?例如每秒鐘ping一個饋送,如果發生新的更改,則獲取數據並將其插入數據庫。

+0

如果您不清楚我的問題,請隨時通知我。 – 2010-01-25 01:57:53

+0

對於Q5,我認爲我可以使用rufus-scheduler gem – 2010-01-25 02:32:11

回答

2

這可能需要幾個問題:P ...但它也是一個維基的良好基礎。

Q1。 Rails使用約定 - 如果你有一個叫做「list」的視圖,rails就足夠聰明瞭,就像列表方法存在一樣。當然,由於沒有方法,你不會有任何邏輯,但視圖仍然會呈現。 Q2302。 如果你添加一個列表方法,Rails現在會調用它。同樣,Rails足夠聰明地假設列表操作映射到列表視圖。如果你想調整不同的視圖,你可以使用控制器的內置「渲染」方法。

Q3。通常,您不應該從視圖中調用控制器方法。這根本不是MVC模型的一部分。您可以將數據傳遞到視圖中,您可以使用助手來獲取所需的任何特定於視圖的方法。如果您有大量的自定義邏輯,您可以開始將代碼推送到模型中,甚至可以構建位於/ lib目錄中的模塊和類。

Q4。 有許多日誌插件和擴展。我從來沒有使用過它們,因爲我總是發現默認綽綽有餘。

Q5。 這絕對是一個完全不同的問題。建議開始一個新的,但做一個搜索,因爲我知道這已在SO之前相當廣泛地解決。有許多機制可以與Rails一起工作。

+0

謝謝。 Q2。哪一個應該先打電話?我的意思是,Controller.List然後ListView?或ListView,然後Controller.List? Q3。好的。但我應該能夠從視圖調用模型,對吧?比方說,我正在實施「保存」...我需要從View中調用Model.Save(),對吧? – 2010-01-25 03:17:16

+0

您不必調用控制器方法... rails爲您處理。 您可以從控制器調用model.save。該觀點應該只能有邏輯的介紹。 – 2010-01-25 03:41:34

+0

對不起。我不明白Rails如何爲我處理它。如果我們調用http:// localhost/store/newstock,則Rails將自動調用「New Stock」視圖,對吧?但如果用戶點擊「保存」按鈕,我將需要從視圖調用Controller.Save或Model.Save。對?如果我沒有在View中提及它,Rails如何自動知道我想調用Save? – 2010-01-25 03:50:38