Rails中的非标准路由

时间:2010-05-18 16:45:38

标签: ruby-on-rails routing routes

我目前有一个如下所示的routes.rb文件:

map.resources :profiles do |profile|
  profile.resources :projects, :has_many => :tasks
end

这给了我这样的路线:

/profiles/:profile_id/projects/:project_id/tasks

这接近我想要的,但是我不想使用'/ profiles /:profile_id /'部分来代替那个用户名,所以路线看起来像:

/:profile_user/projects/:project_id/tasks

我怎样才能实现这样的目标?我已经看了一遍,并没有找到任何关于如何做到这一点,但我也可能没有找到正确的事情。

2 个答案:

答案 0 :(得分:0)

我尝试使用命名空间或连接的一些选项,但它没有用..

如果你真的想做这些路线,我想你必须使用connect并创建所有路线,如下所示:

map.connect ':profile_user/projects/:project_id/tasks', :controller => :tasks, :action => :index, :method => :get
map.connect ':profile_user/projects/:project_id/tasks/new', :controller => :tasks, :action => :new, :method => :get
map.connect ':profile_user/projects/:project_id/tasks', :controller => :tasks, :action => :create, :method => :post

答案 1 :(得分:0)

您可以使用with_options方法:

  map.with_options(:path_prefix => ":profile_user", :name_prefix => "profile_" ) do |profile|  
    profile.resources :projects, :has_many => :tasks
  end

然后它会为您提供以下路线:

profile_project_tasks_path(user.username, project)
# => /:profile_user/projects/:project_id/tasks

new_profile_project_task_path(user.username, project)
# => /:profile_user/projects/:project_id/tasks/new