最近我从这次讨论中了解了路线中的铁路问题 How to have one resource in routes for namespace and root path altogether - Rails 4。现在在我的应用程序中,我有这样的路线:
namespace :admin do
resources :photos
resources :businesses
resources :projects
resources :quotes
end
resources :photos, param: 'slug'
resources :businesses, param: 'slug' do
resources :projects, param: 'slug' #As I need both the url one inside business and one outside
end
resources :projects, param: 'slug'
resources :quotes, param: 'slug'
还有更多的资源在我需要的时候重复着。我知道如何实施它们。关心我可以这样做:
concern :shared_resources do
resources :photos
resources :businesses
resources :projects
resources :quotes
end
namespace :admin do
concerns :shared_resources
end
concerns :shared_resources
但我怎样才能在每次关注中给出不同的param
?我尝试这样做:
concerns :shared_resources, param: 'slug'
但这并没有改变路线。如果我添加:
resources :photos, param: 'slug'
然后它将添加路由slug而不是id。但是在管理方面我需要id而在前端我需要slug。那么有什么选择可以在关注中传递这个以便干掉代码。
答案 0 :(得分:5)
是的,我记得看到过这件事。它不在Rails指南中,但an answer to a SO question有点让我感到惊讶。您可以使用一个块:(引自上述答案)
在Rails 4中,您可以将选项传递给关注点。所以,如果你这样做:
# routes.rb
concern :commentable do |options|
resources :comments, options
end
resources :articles do
concerns :commentable, commentable_param: 'slug'
end
然后当你耙路线时,你会看到你得到一条像
这样的路线
POST /articles/:id/comments, {commentable_param: 'slug'}