2013-11-22 39 views
2

我定義在routes.rb中下列自定義Rails的路線:如何強制定製Rails的路線使用:ID代替:<model> _id

resources :projects do 
    get 'members' 
end 

這將導致以如下的路線(從耙路輸出):

project_members GET  /projects/:project_id/members(.:format) 

我想什麼,不過,是路徑映射到這個代替(變化:PROJECT_ID到:ID)

project_members GET  /projects/:id/members(.:format) 

我該如何做到這一點?

回答

3

成員是嵌套資源嗎?如果這樣定義爲一個,並且明白這就是爲什麼你在路由中有:project_id,因爲嵌套資源中的:id被最終子項使用 - 你不能擁有多個嵌套資源,它們都使用相同的變量來定義它們ID。

resources :projects do 
    resources :members 
end 

添加在嵌套的第三級,它變得有點更清晰的解釋:

resources :projects do 
    resources :members do 
    resources :colours 
    end 
end 

有了這個嵌套,您可以參觀app/projects/:project_id/members/:member_id/colours/:id其將由colours控制器,它知道:id送達定義該控制器模型的一個實例,並且其他任何已命名的id都屬於其他資源。

否則,我認爲你只是需要將其定義爲一個成員方法:

resources :projects do 
    member do 
    get 'members' 
    end 
end 

這告訴路由的行動members是屬於的project實例的非資源的行動,我認爲應該把你排除在外,但要確保這是正確的。

請參閱部分2.10 of Rails Routing from the Outside In

+0

不,在這種情況下,成員不是嵌套資源。爲了這個問題,只要將「成員」視爲某個項目的一些操作即可。 –

+0

@AndyR。我答案中的最後一個代碼塊應該做你想要的。 – Matt

+1

對不起,由於「成員」關鍵字恰好與動作名稱相同,所以令人困惑。但是,它的工作原理。謝謝! –

相關問題