Dee*_*eep 6 routes ruby-on-rails ruby-on-rails-4
最近我从这个讨论中了解了路由中的rails问题 如何在命名空间和根路径的路由中有一个资源--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'
Run Code Online (Sandbox Code Playgroud)
而且还有更多的资源在我需要的时候重复着.我知道如何实施它们.关心我可以这样做:
concern :shared_resources do
resources :photos
resources :businesses
resources :projects
resources :quotes
end
namespace :admin do
concerns :shared_resources
end
concerns :shared_resources
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能param在每次关注中给出不同的看法?我尝试这样做:
concerns :shared_resources, param: 'slug'
Run Code Online (Sandbox Code Playgroud)
但这并没有改变路线.如果我补充:
resources :photos, param: 'slug'
Run Code Online (Sandbox Code Playgroud)
然后它将添加路由slug而不是id.但是在管理方面我需要id而在前端我需要slug.那么有什么选择可以在关注中传递这个以便干掉代码.
是的,我记得看到过这个问题.它不在Rails指南中,而是回答了一个让我感到惊讶的SO问题.您可以使用一个块:(引自上述答案)
在Rails 4中,您可以将选项传递给关注点.所以,如果你这样做:
# routes.rb
concern :commentable do |options|
resources :comments, options
end
resources :articles do
concerns :commentable, commentable_param: 'slug'
end
Run Code Online (Sandbox Code Playgroud)
然后当你耙路线时,你会看到你得到一条路线
POST /articles/:id/comments, {commentable_param: 'slug'}
Run Code Online (Sandbox Code Playgroud)