代码之家  ›  专栏  ›  技术社区  ›  icecream

RubyonRails条件路由

  •  1
  • icecream  · 技术社区  · 16 年前

    我有一个网站列出了许多工作,但我也希望每个帐户能够访问一个地方的工作。因此,我使用这些路线:

    map.resources :jobs
    map.resource :account, :has_many => :jobs
    

    这让我觉得 localhost/jobs/ localhost/account/jobs . 然而,这两种方法似乎都很有效 JobsController::index . 如何在索引操作中设置条件(如何访问URL中是否指定了帐户/作业或仅指定了作业?)或更改帐户路径以呈现不同的操作?正确的方法是什么?

    3 回复  |  直到 16 年前
        1
  •  3
  •   bantic    16 年前

    可以在创建管线时使用块,然后传递 :controller

    map.resource :account do |account|
      # If you have a special controller 'AccountJobsController'
      account.resources :jobs, :controller => "account_jobs"
    end
    

    将控制器放入目录结构中,然后以嵌套方式引用它们,这可能会更简洁。例如:

    map.resource :account do |account|
      account.resources :jobs, :controller => "accounts/jobs"
    end
    

    class Account::JobsController < ApplicationController
      ##
      ## etc.
      ##
    end
    

    你可以随时使用 rake routes 检查已生成哪些路由以及它们将使用哪些控制器。

        2
  •  2
  •   EmFi    16 年前

    向资源定义中添加需求允许您传递额外的参数

    map.resources :jobs
    map.resource :account, :has_many => :jobs, :requirements => {:account => true}
    

    然后 params[:account] http://www.mysite.tld/account/jobs http://www.mysite.tld/jobs '

    • 获取没有id路由的请求以进行索引。
    • POST请求要创建的路由
    • 删除要销毁的路由请求。
        3
  •  0
  •   avaynshtok    16 年前

    account_jobs  GET    /accounts/:account_id/jobs/:job_id    {:controller => 'jobs', :action => 'index'}
    

    这意味着当通过/account/jobs路由调用您的操作时,您应该有一个:account\u id参数。然后,您可以根据此参数的存在进行逻辑切换:

    if params[:account_id].nil?
       ...
    else
       ...
    end