如何在rails中更改多个嵌套路由

时间:2014-03-22 18:57:36

标签: ruby-on-rails routes

我正在做一个课程系统,我想简化路线。

我这样做了:

resources :courses do
    resources :modules do
      resources :lesson
    end
end

然后返回:

/courses/:course_id/modules/:module_id/lesson/:id
/courses/:course_id/modules/:id
/courses/:id
etc...

我想要我的路线:

/courses/:course_name/:module_name/:lesson_name
/courses/:course_name/:module_name/
/courses/:course_name/
etc...

但是怎么样?! :(

1 个答案:

答案 0 :(得分:0)

在路线文件

get "/courses/:course_name/:module_name/:lesson_name", as: :courses

那么你应该能够生成路径:

courses_path(course_name: course.name, module_name: module.name, lesson_name: lesson.name)

但我建议反对它:

1)这是斗争惯例:不要期望对此有好的支持,加入该项目的新开发者都不会喜欢你。

2)您必须确保所有课程/模块/课程名称都是唯一且符合网址的

3)你必须确保名称永远不会改变,因为那时网址会改变。

我建议坚持使用默认的嵌套路径并覆盖每个模块上的#to_param 像是:

def to_param "#{super}-#{name.downcase.gsub(' ', '-')}" # you need a better regex here end 所以网址看起来像

/courses/33-computer-science/modules/23-engineering/lesson/56-design-patterns

有关自定义路线的详情:http://guides.rubyonrails.org/routing.html#dynamic-segments