使用相同页面的RESTFUL路由

时间:2012-07-09 16:10:00

标签: ruby-on-rails ruby-on-rails-3

我希望找到为我的应用设置路线的最佳方法。

该应用程序允许用户注册,发布工作和申请工作。我遇到的问题是两条应该真正显示不同内容的路由是连接到同一页面。

我的路线如下:

 resources :users do
   resources :apps
 end

 resources :jobs do
   resources :apps
 end

由于这个原因,我最终得到了两条路径:

users/id/apps
jobs/id/apps

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

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

人们可以提供有关如何最佳路线的任何建议,我们将不胜感激! :)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您使用"资源"关键字,rails只会映射到默认路由 如果您希望将特定路线映射到其他地方,则应考虑使用"匹配。"
例如:

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

此页面显示了它的更详细用法:http://guides.rubyonrails.org/routing.html
您还可以选择将路径更改为其他内容或代码本身 希望有所帮助。