我正在做一个课程系统,我想简化路线。
我这样做了: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...
但是怎么样?! :(
答案 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