我有一个管理命名空间,它给了我通常的路由,例如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.
我无法发现任何错误,这是非常标准的,所以我不确定会出现什么问题......
答案 0 :(得分:2)
有趣。在Project上定义to_param
方法时会发生什么?例如
class Project < ActiveRecord::Base
def to_param
self.id
end
end
这应该是默认值,这不一定是必要的。但是,如果你明确指出会发生什么?尝试添加上面的方法,然后回到原来只传递@project
的方法答案 1 :(得分:0)
我希望我可以帮助你。我们有一个包含多个命名空间部分的大型应用程序我们的路由是用你描述的确切方法定义的,我们用对象调用路径助手。我们在应用程序中的位置没有使用id访问。
我们的应用程序从Rails 2.1开始,已经过渡到2.2和2.3,并没有对路由进行重大更改。对不起,我无法提供更多帮助。
对等