【问题标题】:RESTFUL routing with the same pageRESTFUL 路由同页面
【发布时间】:2012-07-09 16:09:59
【问题描述】:

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

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

我的路线如下:

 resources :users do
   resources :apps
 end

 resources :jobs do
   resources :apps
 end

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

users/id/apps
jobs/id/apps

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这两条路径都可能适合您想要做的事情。当请求进入时

    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
    

    【讨论】:

    • 您好,Ed,感谢您的回复,这很有帮助。如果您能提供一个示例来说明我将如何检查传入请求的参数,那就太好了。我猜这将是某种ifels 声明,但不确定我将如何构建它?再次感谢! :)
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的帮助 Linx,在这种情况下,我认为能够在控制器中定义它是最好的,因为我试图尽可能地“放松”。这仍然非常有用! :)
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多