0

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

通常,资源是这样的:

resources :article do
  resources :comment 
end

这会产生 URL /article/:article_id/comment [当然是评论#index]

但是,我想知道我是否可以采取不同的方式来获得类似的东西

/article/comment   [excluding :article_id]

Article 将具有所有其他正常路由,并且 comment 的行为与第一个示例中的行为相同。有没有办法做到这一点,以便我可以保持 /comment 与 comments_controller 的连接,或者我是否需要将所有评论方法重新定位到articles_controller?我宁愿避免这种情况,因为它会在以后引起头痛。

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

编辑:

实际目的与示例不同。我希望控制器“employee_benefits”成为常规控制器并拥有常规资源。但是,我希望能够执行 /employee_benefits/new_type 之类的操作。一种福利是在创建新员工福利时出现在表单中的东西。我希望能够做 /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 
4

2 回答 2

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
于 2013-08-13T20:46:35.123 回答
-1

这应该对您有所帮助(请注意,我省略了复数 's'):

resource :article do
    resource :comment
end

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

于 2013-08-13T20:45:30.677 回答