Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用相同页面的RESTFUL路由_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

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,在这个时候,我认为能够在控制器中定义它是最好的,因为我正试图尽可能地“安静”。这仍然非常有用!:)