获得与标准嵌套资源不同的东西

时间:2013-08-13 20:33:03

标签: ruby-on-rails

我想知道是否有可能以不同于我通常看到的方式嵌套资源。

通常,资源是这样的:

resources :article do
  resources :comment 
end

这会生成网址/article/:article_id/comment [当然为评论#index]

然而,我想知道我是否能以不同的方式做到这一点

/article/comment   [excluding :article_id]

文章将拥有所有其他正常路线,并且评论的行为与第一个示例中的一样。有没有办法做到这一点,所以我可以保持/注释与comments_controller连接,或者我是否需要将所有注释方法重新定位到articles_controller?我宁愿避免这种情况,因为它会导致头痛。

**你可能会问为什么我需要在这种情况下这样做。事实是,我在不同的背景下这样做,但这个更容易解释。

编辑:

真正的目的与示例不同。我想要一个控制器'employee_benefits'作为常规控制器并拥有常规资源。但是,我希望能够做一些像/ employee_benefits / new_type这样的事情。一种好处是在创建新的employee_benefit时出现在表单中的内容。我希望能够做一些事情,比如/ employee_benefits / edit_type [:id],/ employee_benefits / delete [不完全正确]

我认为命名空间是要走的路,但我不完全确定如何做到这一点。

更多编辑:

我目前正在使用这些资源:

  match '/benefits/new_type' => 'company_benefits#new_type'
  match '/benefits/create_type' => 'company_benefits#create_type'
  match '/benefits/types' => 'company_benefits#types'
  match '/benefits/type' => 'company_benefits#types'

而不是

  resources :company_benefits, :path => '/benefits', :as => :benefits do 
    <not using this line of code>
    resources :company_benefit_types
    </not using this line of code>
  end 

2 个答案:

答案 0 :(得分:1)

您可以查看名称空间示例,并在评论路由中加上“/ article”前缀。这会创建你想要的路线 - 虽然我鼓励你考虑它并确保删除文章ID是你想要的。

浅巢也可能适合你 - http://guides.rubyonrails.org/routing.html

编辑:

听起来你想要的东西在rails 2中会是这样的:

resources :company_benefit_types, :path_prefix => "/benefits"

在rails 3中,它看起来像这样:

scope "/benefits" do
    resources :company_benefit_types
end

运行bundle exec rake routes检查输出,看看它是什么样的。

   company_benefit_types GET    /benefits/company_benefit_types(.:format)          company_benefit_types#index
                          POST   /benefits/company_benefit_types(.:format)          company_benefit_types#create
 new_company_benefit_type GET    /benefits/company_benefit_types/new(.:format)      company_benefit_types#new
edit_company_benefit_type GET    /benefits/company_benefit_types/:id/edit(.:format) company_benefit_types#edit
     company_benefit_type GET    /benefits/company_benefit_types/:id(.:format)      company_benefit_types#show
                          PUT    /benefits/company_benefit_types/:id(.:format)      company_benefit_types#update
                          DELETE /benefits/company_benefit_types/:id(.:format)      company_benefit_types#destroy

答案 1 :(得分:-1)

这应该可以帮到你(请注意我将复数留下了'):

resource :article do
    resource :comment
end

实际上你在那里写的内容会产生articles/:article_id/comments