我有一个在线培训的应用程序,每个在线培训都有几个章节。我不想仅为培训章节创建下一个控制器。我想在TrainingsController中有新的动作,可能被称为章节。然后我想要这样的URL:
/培训/ 1 /章节/ 3
(/ controller / action / id of chapter的控制器/ id)
你能帮我解决一下如何设置routes.rb来实现这种行为吗?我尝试了很多东西,但它仍然破碎了。
提前谢谢!
彼得
答案 0 :(得分:3)
您可以将路线定义为:
resources :trainings do
get 'chapter/:chapter_id', action: :chapter, as: :training_chapter, constraints: { chapter_id: /\d+/ }
end
然后在trainings_controller.rb
:
def chapter
# params[:chapter_id]
...
end
行get 'chapter/:chapter_id', action: :chapter, as: training_chapter, constraints: { chapter_id: /\d+/ }
定义get
格式为training/:id/chapter/:chapter_id
的路由,该路由执行chapter
中的TrainingController
操作。
此路由的名称由training_chapter
定义as: :training_chapter
,因此您可以使用training_chapter_trainings_path
等命名的路由助手。
最终选项constraints: /\d+/
限制chapter_id
可以容纳的值,具体取决于此路由的执行方式。因此,/trainings/1/chapter/1
的获取请求会执行chapter
操作,而/trainings/1/chapter/a
则不会,因为a
的值chapter_id
不是数字。
答案 1 :(得分:1)
我认为这就是你要找的东西:
match '/trainings/:training_id/chapter/:chapter_id' => 'trainings#chapter', :as => 'chapter_training'
应用程序/控制器/ trainings_controller.rb
def chapter
end