我希望找到为我的应用设置路线的最佳方法。
该应用程序允许用户注册,发布工作和申请工作。我遇到的问题是两条应该真正显示不同内容的路由是连接到同一页面。
我的路线如下:
resources :users do
resources :apps
end
resources :jobs do
resources :apps
end
由于这个原因,我最终得到了两条路径:
users/id/apps
jobs/id/apps
我想要做的是使用第一个路径来显示用户已完成的作业应用程序。然后,我想使用第二条路径向作业所有者显示他们为该作业收到的应用程序。
我遇到的问题是这两条路径最终都在apps#index
人们可以提供有关如何最佳路线的任何建议,我们将不胜感激! :)
答案 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
您还可以选择将路径更改为其他内容或代码本身
希望有所帮助。