我有一个管理命名空间,它给了我通常的路由,例如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...>

&QUOT;:ID&QUOT;似乎包含整个对象,所以我尝试直接传递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.

我无法发现任何错误,这是非常标准的,所以我不确定会出现什么问题......

有帮助吗?

解决方案

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

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

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

的方法

其他提示

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

我们的应用程序从Rails 2.1开始,已经过渡到2.2和2.3,并没有对路由进行重大更改。对不起,我无法提供更多帮助。

对等

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top