我想知道是否有可能以不同于我通常看到的方式嵌套资源。
通常,资源是这样的:
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
答案 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
。