1

我正在寻找为我的应用程序设置路线的最佳方法。

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

我的路线如下:

 resources :users do
   resources :apps
 end

 resources :jobs do
   resources :apps
 end

因此,我最终得到了两条路径:

users/id/apps
jobs/id/apps

我想做的是使用第一个路径来显示用户已完成的工作申请。然后,我想使用第二条路径向工作的所有者展示他们收到的该工作的申请。

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

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

4

2 回答 2

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 是否在参数中)......像这样:

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
于 2012-07-09T16:25:49.930 回答
1

如果你使用“resources”关键字,rails 只会映射到默认路由。
如果您希望将特定路线映射到其他内容,则应考虑使用“匹配”。
例如:

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

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

于 2012-07-09T16:39:47.807 回答