2012-08-10 103 views
1

我的路線是這樣的:基本嵌套路線(如何嵌套的路線,而不是同時嵌套路由)

resources :users do 
    resources :projects 
end 

我希望能夠訪問這樣的路線:

/users/1/projects/1 

/projects/1 

這可能嗎?我將如何設置?我在我的應用程序中發佈了問題,我們希望用戶能夠通過/ users /:id/projects /:id查看他們自己的項目,而且在其他頁面上我們只想看到所有創建的項目,像這樣/ projects或一個項目和一個id,像這樣/ projects /:id。我覺得我錯過了一些東西,我應該擺脫嵌套路線嗎?或者我可以兼得。

回答

2

你可以擁有兩者。只需將resources :projects添加到您的routes.rb。 然後,在你ProjectsController你將不得不做的事:

def index 
    if params[:user_id] 
    @projects = User.find(params[:user_id]).projects 
    else 
    @projects = current_user.projects 
    end 
end 

我假設您的身份驗證系統,爲你的控制器current_user方法(如大部分做)

+0

+1我實現了這個,它工作正常......我不喜歡它的一件事是我意識到很多我的代碼結束了條件檢查user_id。在我看來,如果沒有用戶,像這個users_project_path這樣的路由將會中斷,所以我不得不添加更多條件...知道這個的任何解決方案嗎?謝謝:) – botbot 2012-08-11 02:50:06

+0

如果將/ projects和/ users /:user_id/projects統一到相同的控制器/視圖太麻煩了,你可以將其中一個路由發送到不同的控制器。您可以使用路由的:controller選項來執行此操作; 'resources:projects,:controller =>:current_user_projects' 或者: 'resources:users do resources:projects,:controller =>:user_projects end' – 2012-08-11 07:24:52

2

提供你一定能有兩種方式取決於你的需求。

resources :users do 
    resources :projects 
end 
resources :projects 

將在/ users /:user_id/projects /:id和/ projects /:id中爲您提供網址。

您可以檢查您的項目控制器params [:user_id]是否存在並採取必要的措施。