Ruby on rails 使用相同页面的RESTFUL路由
我正在寻找为我的应用程序设置路由的最佳方法 该应用程序允许用户注册、发布作业和申请作业。我遇到的问题是,两个应该真正显示不同内容的路由正在链接到相同的页面 我的路线如下:Ruby on rails 使用相同页面的RESTFUL路由,ruby-on-rails,ruby-on-rails-3,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 我想做的是使用第一个路径显示用户已完成的作业应用程序。然后,我想使用
resources :users do
resources :apps
end
resources :jobs do
resources :apps
end
因此,我有两条路径:
users/id/apps
jobs/id/apps
我想做的是使用第一个路径显示用户已完成的作业应用程序。然后,我想使用第二条路径向作业所有者显示他们收到的该作业的申请
我遇到的问题是,这两条路径最终都位于apps#index
如果您能就如何选择最佳路线提供任何建议,我们将不胜感激!:) 这两条路径对于您想要做的事情来说都可能很好。当收到请求时
users/:用户id/apps
然后,您可以在控制器中执行类似操作,以填充应用程序列表:
@apps = User.find_by_id(params[:user_id]).apps
对于另一个路径,您也可以使用参数[:jobs\u id]
,例如
@apps = Job.find_by_id(params[:job_id]).apps
在您的控制器中,您会有一些条件代码,根据请求通过的路径生成@apps(通过查看:user\u id或:job\u 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
如果使用“resources”关键字,rails将只映射到默认路由。如果你想把特定的路线映射到其他的东西,你应该考虑使用“匹配”。 例如:
match "users/id/apps" => "users/id/apps"
match "jobs/id/owners" => "jobs/id/owners"
此页面显示了它的更详细用法:您还可以选择将路由更改为其他路径或代码本身。
希望能有所帮助。嗨,埃德,谢谢你的回复,这非常有帮助。如果您能提供一个示例,说明如何检查传入请求的参数,那就太好了。我猜这可能是某种
ifels
语句,但我不确定如何构造它?再次感谢!:)谢谢你的帮助,Linx,在这个时候,我认为能够在控制器中定义它是最好的,因为我正试图尽可能地“安静”。这仍然非常有用!:)