Rails资源路由使用动态前缀而不是控制器名称

时间:2014-09-21 19:07:43

标签: ruby-on-rails ruby-on-rails-4 routing routes

我有一个TextsController,每个Text可以是不同的(固定)类型。

我们说我有一本"书"类型。我想创建一个显示文本的资源路径,我希望路径看起来像这样:

/book/my-book

另一种类型,"手册"例如,应该导致使用以下URL:

/manual/rtfm

好吧,我have RTFM我无法按照我认为的方式工作。

以下是我尝试的内容:

scope '/:text_type' do
  resources :texts, only: :show
end

rake routes向我展示了以下路线规范:

text GET /:text_type/texts/:id(.:format) texts#show

我不知道为什么静态的文本'细分应该在哪里?

所以我尝试了一个空的path选项:

scope '/:text_type', path: '' do
  resources :texts, only: :show
end

哪个不会改变任何内容,我想是因为(from source)我scope的第一个参数实际上覆盖了path的任何值。
唯一能让我满意的路线就是:

scope '/:text_type' do
  resources :texts, only: :show, path: ''
end

这似乎完全违背了scope的目的,即{?} [范围]一组到达给定默认选项的路线"。

为什么以前的任何表单都不会覆盖我path来电resources

对我来说看起来像个错误?

我应该提交错误报告,还是用f *手册打我的头? ^^

1 个答案:

答案 0 :(得分:1)

首先是确定范围的事情。带有范围的路由用于命名空间路由,就像管理区域一样。所以提到的路由是正确生成的,并且没有错误(并且不需要错误报告)。您可以在Controller Namespaces and Routing阅读有关命名空间的更多详细信息 您可以通过关注' Creating Vanity URLs in Rails'来自行调整参数。 或使用像friendly_id建议一样的Railscast宝石 虽然我会坚持使用ID,但有几个原因。