首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 3-新的控制器动作路线

Rails 3-新的控制器动作路线
EN

Stack Overflow用户
提问于 2014-03-09 18:20:39
回答 2查看 50关注 0票数 1

我有一个在线培训的应用程序,每一次在线培训都有几个章节。我不想仅仅为了训练章节而创建下一个控制器。我希望在TrainingsController中有新的操作,这可能被称为章节。那么我想要这样的URL:

/培训/1/章/3

(/控制器/培训/行动/章节编号)

你能帮我如何设置routes.rb来实现这种行为吗?我试过很多东西,但还是坏了。

提前谢谢你!

佩尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-09 18:29:38

您可以将路线定义为:

代码语言:javascript
运行
复制
resources :trainings do 
  get 'chapter/:chapter_id', action: :chapter, as: :training_chapter, constraints: { chapter_id: /\d+/ }
end

然后在你的trainings_controller.rb中:

代码语言:javascript
运行
复制
def chapter
  # params[:chapter_id]
  ...
end

get 'chapter/:chapter_id', action: :chapter, as: training_chapter, constraints: { chapter_id: /\d+/ },定义了格式training/:id/chapter/:chapter_idget路由,它在TrainingController中执行chapter操作。

此路由的名称是由training_chapter定义的as: :training_chapter,因此您可以使用命名的路由帮助程序(如training_chapter_trainings_path )。

最后一个选项constraints: /\d+/是限制chapter_id可以持有的值,根据这些值来执行该路由。因此,对/trainings/1/chapter/1的get请求执行chapter操作,而/trainings/1/chapter/a不执行,因为chapter_id的值a不是数字的。

票数 3
EN

Stack Overflow用户

发布于 2014-03-09 18:56:22

我想这就是你想要的:

代码语言:javascript
运行
复制
match '/trainings/:training_id/chapter/:chapter_id' => 'trainings#chapter', :as => 'chapter_training'

app/控制器/培训控制器

代码语言:javascript
运行
复制
def chapter
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22286157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档