2010-12-18 85 views
10

在rails 3.0之前,向控制器添加新動作很容易。Rails 3.0:向控制器添加新動作

您只需將新方法foobar添加到控制器類(稱爲mycontroller)。 在該控制器的視圖文件夾中添加一個html文件,foobar.html.erb

然後,如果您指向瀏覽器.../mycontroller/foobar一切正常。

然而,在軌3.0當我增加了一個新的動作如上所述,我得到以下錯誤:

No route matches "/mycontroller/foobar"

什麼在軌3.0改變了嗎?我究竟做錯了什麼?

回答

0

錯誤說明了一切。你的config/routes.rb中沒有相應的路由。檢查默認路由是否被註釋掉。如果是這樣,你需要爲你的新動作添加一條路線。

19

一下添加到routes.rb

get 'mycontroller/foobar' 

這將路由URL http://mysite.com/foobar使用HTTP GET的foobar行動。

一些更多的信息:

  1. 注意的是,在控制器定義def foobar不是一個嚴格的要求(除非你需要顯示視圖之前做一些foobar) - 但視圖必須存在。換句話說,即使控制器中不存在def foobar方法,視圖foobar.html.erb仍將呈現。

  2. 這是good overview of routes in Rails 3

  3. 此外,如果您還不知道,可以列出您應用程序使用rake routes知道的所有路線。因此,如果rake routes的輸出未列出某些控制器/操作的路由,則會發生「無路由匹配」錯誤。

+0

+1的答案和overgview文章的內容。 – Zlatko 2012-06-19 16:05:14