我有以下路由器:
scope ':name' do # Category :name
get :animators, controller: 'categories'
get :creators, controller: 'categories'
resources :items, only: [:show]
end
它会生成以下网址:
http://localhost:3000/birthday/ # index page
http://localhost:3000/birthday/item/123 # resource show page
但我想做的是让我的第二个网址看起来像这样
http://localhost:3000/birthday/animator/123 # resource show page
在我的项目模型Animator
上是:type
如果我使用内部范围
scope ':type' do
resources :items, only: [:show]
end
我会得到
http://localhost:3000/birthday/animator/item/123
但我想摆脱项目,加上它让我在视图中使用link_to
时指出一个额外的参数,这是不好的。
答案 0 :(得分:0)
scope ':name' do
get :animators, controller: 'categories'
get :creators, controller: 'categories'
resources :items, only: [:show]
get '/animator/:id' => 'animator#show'
end
resources :items, only: [:show]
只会抓住/birthday/items/1
,/birthday/items/2
等路线。虽然get '/animator/:id' => 'animator#show
能够像您在问题中提到的那样捕捉路线:
http://localhost:3000/birthday/animator/123
答案 1 :(得分:0)
我添加了
get ':type/:slug', to: 'items#show', as: :item
到范围块。它看起来不是很好的IMO,但我会尽力解决这个问题。