Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 RubyonRails条件路由_Ruby On Rails_Ruby_Routing - Fatal编程技术网

Ruby on rails RubyonRails条件路由

Ruby on rails RubyonRails条件路由,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,我有一个网站列出了许多工作,但我也希望每个帐户能够访问一个地方的工作。因此,我使用这些路线: map.resources :jobs map.resource :account, :has_many => :jobs 这会得到像localhost/jobs/和localhost/account/jobs这样的URL。但是,两者似乎都呈现JobsController::index。如何在索引操作中设置条件(如何访问URL中是否指定了帐户/作业或仅指定了作业?)或更改帐户路径以呈现不同的操作

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

map.resources :jobs
map.resource :account, :has_many => :jobs
这会得到像
localhost/jobs/
localhost/account/jobs
这样的URL。但是,两者似乎都呈现
JobsController::index
。如何在索引操作中设置条件(如何访问URL中是否指定了帐户/作业或仅指定了作业?)或更改帐户路径以呈现不同的操作?这样做的正确方法是什么?

如果您运行“rake routes”,您应该会看到类似的内容

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
如果您运行“rake路由”,您应该会看到类似的内容

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

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

map.resources :jobs
map.resource :account, :has_many => :jobs, :requirements => {:account => true}
然后,如果路由url为“”,将设置
参数[:account]
,如果为“”,则取消设置

与所有其他restful路由一样,操作取决于上下文

  • 获取没有id路由的请求以进行索引
  • 获取具有要显示的id路由的请求
  • POST请求要创建的路由
  • 将请求放入要更新的路由
  • 删除要销毁的路由请求

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

map.resources :jobs
map.resource :account, :has_many => :jobs, :requirements => {:account => true}
然后,如果路由url为“”,将设置
参数[:account]
,如果为“”,则取消设置

与所有其他restful路由一样,操作取决于上下文

  • 获取没有id路由的请求以进行索引
  • 获取具有要显示的id路由的请求
  • POST请求要创建的路由
  • 将请求放入要更新的路由
  • 删除要销毁的路由请求

您可以在创建路由时使用块,然后传递
: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
如果使用上述代码段,则应在app/controllers/accounts/jobs\u controller.rb中创建一个控制器,其定义如下:

class Account::JobsController < ApplicationController
  ##
  ## etc.
  ##
end
类帐户::作业控制器

您可以始终使用
rake routes
检查已生成哪些路由以及它们将使用哪些控制器。

您可以在创建路由时使用块,然后传递
: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
如果使用上述代码段,则应在app/controllers/accounts/jobs\u controller.rb中创建一个控制器,其定义如下:

class Account::JobsController < ApplicationController
  ##
  ## etc.
  ##
end
类帐户::作业控制器

您可以始终使用
rake routes
来检查已生成哪些路由以及它们将使用哪些控制器。

我刚刚在一个clean rails项目上这样做是为了验证,是的,它确实以这种方式工作。routes.rb:ActionController::Routing::routes.draw do | map | map.resources:jobs map.resources:accounts,:has_many=>:jobs“rake routes”account_jobs GET/accounts/:account_id/jobs(:format){:controller=>“jobs”,:action=>“index”}从日志获取:处理作业控制器#索引(对于127.0.0.1 at 2009-11-18 11:24:22)[GET]参数:{“account_id”=>“123”}Yikes,很抱歉(非)格式化。我的观点是……这种方式是什么意思在你的评论中?这个问题用map.resource将account指定为一个资源。这意味着只有一个资源。你提到的路线并不是为有很多资源的资源创建的。但是如果account是用map.resources.Ah定义的,那就应该是这样的。你完全正确;我完全没有意识到这是资源在e问题。“每个帐户”这一点让我很反感。我只是在一个干净的rails项目上做了这一点来验证,是的,它确实是这样工作的。routes.rb:ActionController::Routing::routes.draw do | map | map.resources:jobs map.resources:accounts,:has_many=>:jobs“rake routes”account\u jobs GET/accounts/:account\u id/jobs(:format){:controller=>“jobs”,:action=>“index”}从log:Processing JobsController#index(在2009-11-18 11:24:22的127.0.0.1版本中)[get]参数:{“account_id=>“123”}Yikes,很抱歉(非)格式设置。我的观点是……这种方式是什么意思在你的评论中?这个问题用map.resource将account指定为一个资源。这意味着只有一个资源。你提到的路线并不是为有很多资源的资源创建的。但是如果account是用map.resources.Ah定义的,那就应该是这样的。你完全正确;我完全没有意识到这是资源在e问题。“每个帐户”一字让我很困惑。你有一个或多个帐户吗?声明“我也想要每个帐户…”表示多个,但“map.resource:account”表示一个。你有一个或多个帐户吗?声明“我也想要每个帐户…”表示多个,但“map.resource:account”表示一个。