2

我有一个 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.

我看不出任何错误,这是非常标准的,所以我不确定出了什么问题......

4

2 回答 2

2

有趣的。to_param在 Project 上定义方法时会发生什么?例如

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

这应该是默认的,这不应该是必要的。但是,如果你明确表示会发生什么?尝试添加上面的方法,然后回到你原来的方法,只传递@project

于 2009-07-31T16:48:53.153 回答
0

我希望我能帮助你解决这个问题。我们有一个包含多个命名空间部分的大型应用程序。我们的路线是在您描述的确切方法中定义的,我们正在使用对象调用我们的路径助手。我们没有使用 id 访问应用程序中的哪个位置。

我们的应用程序从 Rails 2.1 开始,已经过渡到 2.2 和 2.3,路由没有显着变化。抱歉,我无法提供更多帮助。

同行

于 2009-08-02T00:46:29.660 回答