我有一个 admin 命名空间,它为我提供了常用的路由,例如 admin_projects 和 admin_project,但是它们的行为方式并不正常。这是我的第一个 Rails 2.3 项目,所以可能相关,但是我无法通过 Google 找到任何信息。
map.namespace(:admin) do |admin|
admin.resources :projects
end
奇怪的是对于给定的 URL(例如 /admin/projects/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
这还不错,但是当涉及到表单时,我通常使用 [:admin, @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.
我看不出任何错误,这是非常标准的,所以我不确定出了什么问题......