路由关注定义资源的不同参数

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.那么有什么选择可以在关注中传递这个以便干掉代码.

Cyr*_*ris 5

是的,我记得看到过这个问题.它不在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)