2012-01-22 36 views
0

我遇到了解如何RESTful資源在導軌3.工作如果我有我的軌道問題的routes.rb文件:NameError在my_foos#指數未定義的局部變量或方法「foo_bar_my_foos_path」

resources :my_foos do 
    member do 
     get 'foo_bar' 
    end 
end 

我有一個控制器文件my_foos_controller.rb

class MyFoosController < ApplicationController 
    def index 
    end 

    def foo_bar 
    end 
end 

我有一個視圖文件test.html.erb

<%= foo_bar_my_foos_path %> 

當我嘗試顯示我的test.html.erb文件時,出現錯誤: 與標題中相同。

如果我正在處理一個資源(單數)而不是複數資源,我所描述的所有東西都可以工作。我在會議中遺漏了什麼?

謝謝

+0

嘗試運行'rake routes'。這會告訴你所有可用的路由(但沒有'_path'部分,所以你會看到'my_foos',而不是'my_foos_path')。你在那裏收費'foo_bar_my_foos'嗎?我的猜測是它可能是'my_foos_foo_bar',它是你想要的正確路徑,但是在那裏重複檢查。 – MrDanA

回答

0

從命令行使用耙路徑顯示您的路線。每條路線的最左邊部分是路線的名稱。附加_path讓它工作。

+0

是的,我可以在左側看到我的路線,就像我說過的,如果我使用單一定義進行資源豐富的路線,這種方法效果會很好。如果我在我的路由定義中使用'resource'而不是'resources',它將按照rails文檔中所示的方式工作。但是,如果我使用「資源」將我的控制器定義爲複數資源,那麼這就是我遇到困難的地方。 –

+0

您是否嘗試過使用my_foos的單數形式:foo_bar_my_foo_path? – Jef

+0

我的意思是,當你將foo_bar聲明爲my_foos的單獨成員時,我認爲即使將my_foos聲明爲集合資源,實際上也應該使用my_foos的單數形式(foo_bar_my_foo_path)。 – Jef

0

如果foo_bar被聲明爲成員動作,那麼,通過rails約定,當您使用命名路由時,您將需要提供相應的模型資源ID。像這樣的東西應該工作

foo_bar_my_foos_path(@my_foos) # or @my_foos.id 

如果你不想提供的ID,使用集合在你的路線,而不是。

+0

感謝您的回覆,但ID的傳遞不是問題。我確實嘗試了你的建議,並將一個id值傳遞給助手,如下所示:foo_bar_my_foos_path(12)只是爲了看看會發生什麼,我得到同樣的錯誤。從根本上看,在爲單數資源(資源:my_foos)生成的幫助器方法與資源的複數版本(資源:my_foos)之間似乎有一個不同的約定,也許是rails 3中的一個錯誤? –

相關問題