2012-07-09 101 views
1

我正在寻找为我的应用设置路由的最佳方式。RESTFUL路由使用相同的页面

该应用程序允许用户注册,发布作业和申请作业。我遇到的问题是,应该真正显示不同的东西的两条路线连接到相同的页面。

我的路线如下:

resources :users do 
    resources :apps 
end 

resources :jobs do 
    resources :apps 
end 

由于这个我结束了两个路径结果:

users/id/apps 
jobs/id/apps 

我想什么做的是使用第一个路径中可显示工作用户已完成的应用程序。然后,我想使用第二条路径向作业所有者显示他们为该作业收到的应用程序。

我遇到的问题是两个路径最终在apps#index

任何建议人们可以在如何以最佳路线,这将是非常感谢提供! :)

回答

2

这两条路径都可能适用于您想要做的事情。当一个请求进入

users/:user_id/apps

,那么你就可以做这样的事情在你的控制器来填充应用程序列表:

@apps = User.find_by_id(params[:user_id]).apps 

而在其他路径的情况下, ,你会做同样的事情,但params[:jobs_id],例如

@apps = Job.find_by_id(params[:job_id]).apps 

在你的控制器,你将有一个建立取决于@apps哪条路径请求经由排在一些有条件的代码(通过寻找,看看:USER_ID或:JOB_ID是PARAMS)......这样的事情:

if params[:user_id] 
    @apps = User.find_by_id(params[:user_id]).apps 
elsif params[:job_id] 
    @apps = Job.find_by_id(params[:job_id]).apps 
end 

也许重构为...

if params[:user_id] 
    @user = User.find(params[:user_id]) 
    @apps = @user.apps 
elsif params[:job_id] 
    @job = Job.find(params[:job_id]) 
    @apps = @job.apps 
end 
+0

嗨,埃德,感谢您的回复,这是非常有益的。如果你能提供一个我将如何检查传入请求的参数的例子,那将是非常好的。我猜这将是某种'ifels'声明,但我不确定如何构造它?再次感谢! :) – 2012-07-09 16:40:05

+0

用条件代码编辑答案 – edralph 2012-07-09 20:52:17

+0

非常感谢!这工作:) – 2012-07-10 07:08:11

1

如果使用“资源”的关键字,铁轨将映射到缺省路由。
如果你想特定的路线映射到其他东西,你应该考虑使用“匹配”。
例如:

match "users/id/apps" => "users/id/apps" 
match "jobs/id/owners" => "jobs/id/owners" 

此页面显示的是一个更加详细的用法:http://guides.rubyonrails.org/routing.html
您也可以将路线更改为某个或代码本身的选项。
希望有所帮助。

+0

感谢您的帮助Linx,在这个场合,我认为能够在控制器中定义它是最好的,只是因为我试图尽可能'平静'。虽然这仍然非常有用! :) – 2012-07-09 16:43:16