路由问题定义资源的不同参数

时间:2015-07-31 09:14:16

标签: ruby-on-rails ruby-on-rails-4 routes

最近我从这次讨论中了解了路线中的铁路问题 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。那么有什么选择可以在关注中传递这个以便干掉代码。

1 个答案:

答案 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'}