2009-07-29 20 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,并没有对路由进行重大更改。对不起,我无法提供更多帮助。

同伴