Rails 3 - 新的控制器动作路径

时间:2014-03-09 18:20:39

标签: ruby-on-rails ruby-on-rails-3 rails-routing

我有一个在线培训的应用程序,每个在线培训都有几个章节。我不想仅为培训章节创建下一个控制器。我想在TrainingsController中有新的动作,可能被称为章节。然后我想要这样的URL:

/培训/ 1 /章节/ 3

(/ controller / action / id of chapter的控制器/ id)

你能帮我解决一下如何设置routes.rb来实现这种行为吗?我尝试了很多东西,但它仍然破碎了。

提前谢谢!

彼得

2 个答案:

答案 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