基本嵌套路线(如何嵌套的路线,而不是同时嵌套路由)

问题描述:

我的路线是这样的:基本嵌套路线(如何嵌套的路线,而不是同时嵌套路由)

resources :users do 
    resources :projects 
end 

我希望能够访问这样的路线:

/users/1/projects/1 

/projects/1 

这可能吗?我将如何设置?我在我的应用程序中发布了问题,我们希望用户能够通过/ users /:id/projects /:id查看他们自己的项目,而且在其他页面上我们只想看到所有创建的项目,像这样/ projects或一个项目和一个id,像这样/ projects /:id。我觉得我错过了一些东西,我应该摆脱嵌套路线吗?或者我可以兼得。

你可以拥有两者。只需将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

提供你一定能有两种方式取决于你的需求。

resources :users do 
    resources :projects 
end 
resources :projects 

将在/ users /:user_id/projects /:id和/ projects /:id中为您提供网址。

您可以检查您的项目控制器params [:user_id]是否存在并采取必要的措施。