基本嵌套路由(如何同时拥有嵌套路由而不是嵌套路由)

时间:2012-08-10 08:04:35

标签: ruby-on-rails ruby routes

我有这样的路线:

resources :users do
  resources :projects
end

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

/users/1/projects/1

/projects/1

这可能吗?我该如何设置?我在我的应用程序中有问题,我们希望用户能够通过/ users /:id / projects /:id看到他们自己的项目,但在其他页面上我们只想看到创建的所有项目,像这样/项目或项目和id,像这样/ projects /:id。我觉得我错过了什么,我应该摆脱嵌套路线吗?或者我可以同时拥有两者。

2 个答案:

答案 0 :(得分: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方法(就像大多数人那样)

答案 1 :(得分:2)

根据您的需要,您可以两种方式。

resources :users do
  resources :projects 
end
resources :projects

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

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