【发布时间】:2011-03-22 14:12:21
【问题描述】:
在我的 Rails 3 项目中,我有一个这样的路线列表:
resources :projects do
resources :studies
end
resources :sticky_notes
resources :study_templates
...
目前默认情况下,可以使用 params[:id] 调用这些路由中的 URL 中的 id,但我希望能够使用 params[:sticky_note_id]、params[:study_template_id]、params[:study_id] 调用它们]等。有没有办法可以为这些项目的ID指定参数名称?我是否必须在没有“资源”的情况下手动写出每条路线?
谢谢!
编辑:这是我正在尝试做的一个例子: 这就是当路由如上所写时会发生的情况:
resources :projects do
resources :studies
end
# results in /projects/:project_id/studies/:id
# /projects/:project_id/studies/:id/edit
# /projects/:project_id/studies/:id/new
# etc.
resources :sticky_notes
# results in /sticky_notes/:id
# /sticky_notes/:id/edit
# /sticky_notes/:id/new
# etc.
这就是我想要的:
match '/projects/:project_id/studies/:study_id' => 'studies#show'
match '/projects/:project_id/studies/:study_id/edit' => 'studies#edit'
match '/projects/:project_id/studies/:study_id/new' => 'studies#new'
...
# results in /projects/:project_id/studies/:study_id
# /projects/:project_id/studies/:study_id/edit
# etc
match '/sticky_notes/:sticky_note_id' => 'sticky_notes#show'
match '/sticky_notes/:sticky_note_id/edit' => 'sticky_notes#edit'
match '/sticky_notes/:sticky_note_id/new' => 'sticky_notes#new'
...
# results in /sticky_notes/:sticky_note_id
# /sticky_notes/:sticky_note_id/edit
# etc
我想要第二部分,但在我已经很大的路线文件上没有所有这些工作。 :) 有可能吗?
【问题讨论】:
-
只是出于好奇:你为什么要这样做?有什么好处?
-
我有很多嵌套路由,以及没有嵌套路由也可以访问的页面(即有项目/X/studies/Y 和研究/Y)。其中一个问题是我正在尝试创建一个通用的“笔记”系统,该系统根据 URL 中的参数(study_id、project_id 等)存储笔记。如果我可以通用地指定 id 名称而不是总是测试 params[:study_id].nil?,如果是,则使用 params[:id],如果不使用 [:study_id] 等等,这将更容易做到。
-
如果为 projects/:project_id/studies/:id 和 projects/:project_id/studies/:study_id 设置路线有意义的话,我会两者都做,我只是不知道是否有除了写出所有路线之外的一种简单方法(呃)
-
我明白了!这样一来,控制器可能会变得非常拥挤。我在某些项目上遇到了同样的问题。让我们希望有一个好的答案:)
-
If it would make sense to have routes for both projects/:project_id/studies/:id and projects/:project_id/studies/:study_id I would do both.Routeprojects/:project_id/studies/:id只是一个匹配器,params[:id]和params[:study_id]都会匹配。因此,如果您将两者都写,那么只有最上面的那个才有效。这不是路线问题,而是控制器。您应该提供:id,例如:type.
标签: ruby-on-rails ruby ruby-on-rails-3