我有一个TextsController,每个Text可以是不同的(固定)类型。
我们说我有一本"书"类型。我想创建一个显示文本的资源路径,我希望路径看起来像这样:
/book/my-book
另一种类型,"手册"例如,应该导致使用以下URL:
/manual/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 *手册打我的头? ^^
答案 0 :(得分:1)
首先是确定范围的事情。带有范围的路由用于命名空间路由,就像管理区域一样。所以提到的路由是正确生成的,并且没有错误(并且不需要错误报告)。您可以在Controller Namespaces and Routing阅读有关命名空间的更多详细信息 您可以通过关注' Creating Vanity URLs in Rails'来自行调整参数。 或使用像friendly_id建议一样的Railscast宝石 虽然我会坚持使用ID,但有几个原因。