2009-07-29 66 views
2

我有一個管理員名稱空間,它爲我提供了通常的路線,例如admin_projects和admin_project,但它們並不像通常那樣運行。這是我的第一個Rails 2.3項目,所以也許我通過Google找不到任何信息。已在Rails 2.3中更改了名稱空間路由嗎?

map.namespace(:admin) do |admin| 
    admin.resources :projects 
end 

奇怪的是對於一個給定的URL(如/管理/項目/ 1)我沒有在一個物體傳遞到得到的URL它在某種程度上猜他們:

<%= admin_project_path %> # => /admin/projects/1 

不用擔心,以前沒有注意到這個問題。

但是,如果我試圖像通常那樣傳遞一個對象:

<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...> 

「:ID」似乎包含整個對象,所以我儘量直接傳遞的ID和它的工作原理:

<%= admin_project_path(@project.id) %> # => /admin/projects/1 

這不會是那麼糟糕,但是當它涉及到形式我通常使用:但是,[管理員,@object]:

<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path' 

所以我不能傳入一個id,因爲它需要一個對象類來計算出正確的路線。

<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling. 

我不能發現任何錯誤,這是非常標準的,所以我不知道是怎麼了?...

+0

順便提及我當然可以得到周圍的form_for問題具有以下長手版本: <%的form_for @project,:URL => admin_project_path(@ project.id):方法=>:放do | f | %> – Kris 2009-07-29 15:42:46

回答

2

有趣。在Project上定義to_param方法時會發生什麼?例如

class Project < ActiveRecord::Base 
    def to_param 
    self.id 
    end 
end 

這應該是默認的,這不應該是必要的。但是如果你明確說明會發生什麼?嘗試添加上述方法,然後回到您的原始方法只傳遞@project

+0

這是問題,我'to_param'設置爲返回項目獨特的slu。。然而,slu was總是零(我的壞)。 – Kris 2009-08-03 11:04:46

0

我希望我可以幫你在這一個。我們有一個很大的應用程序,有幾個命名空間的部分。我們的路線是按照您所描述的確切方法定義的,我們正在用對象呼叫我們的路徑助手。沒有在應用程序中使用ID訪問的位置。

我們的應用程序從Rails 2.1開始,已經過渡到2.2和2.3,並沒有對路由進行重大更改。對不起,我無法提供更多幫助。

同伴