如何在Rails中切换路由命名空间?

时间:2015-06-03 10:39:08

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

我有以下路由器:

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时指出一个额外的参数,这是不好的。

2 个答案:

答案 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,但我会尽力解决这个问题。