简体   繁体   English

Rails Routes:更改资源标识符路径名? 始终使用 params[:model_id] 而不是 params[:id]

[英]Rails Routes: change resource identifier path name? always use params[:model_id] instead of params[:id]

I'm not sure how to ask this question...我不知道怎么问这个问题...

But i'm working with nested ROUTES as shown below.但我正在使用嵌套的 ROUTES,如下所示。

I like knowing that the Business ID can always be found using params[:business_id] , obviously except for the actual business controller which requires me to use params[:id] .我喜欢知道总是可以使用params[:business_id]找到业务 ID ,显然除了需要我使用params[:id]的实际业务控制器。

Is there a way to change the route resource id param to always be :business_id instead of having to be like Business.find(params.values_at(:business_id, :id).first) ??有没有办法将路由资源 id 参数更改为始终为:business_id而不必像Business.find(params.values_at(:business_id, :id).first) ??

                  business_exports GET    /businesses/:business_id/exports(.:format)                                                                                businesses/exports#index
                                   POST   /businesses/:business_id/exports(.:format)                                                                                businesses/exports#create
               new_business_export GET    /businesses/:business_id/exports/new(.:format)                                                                            businesses/exports#new
              edit_business_export GET    /businesses/:business_id/exports/:id/edit(.:format)                                                                       businesses/exports#edit
                   business_export GET    /businesses/:business_id/exports/:id(.:format)                                                                            businesses/exports#show
                                   PATCH  /businesses/:business_id/exports/:id(.:format)                                                                            businesses/exports#update
                                   PUT    /businesses/:business_id/exports/:id(.:format)                                                                            businesses/exports#update
                                   DELETE /businesses/:business_id/exports/:id(.:format)                                                                            businesses/exports#destroy
           business_replenishments GET    /businesses/:business_id/replenishments(.:format)                                                                         businesses/replenishments#index
             business_offer_prices GET    /businesses/:business_id/offer_prices(.:format)                                                                           businesses/offer_prices#index
                                   POST   /businesses/:business_id/offer_prices(.:format)                                                                           businesses/offer_prices#create
       business_unmatched_listings GET    /businesses/:business_id/unmatched_listings(.:format)                                                                     businesses/unmatched_listings#index
                                   POST   /businesses/:business_id/unmatched_listings(.:format)                                                                     businesses/unmatched_listings#create
      business_profit_loss_reports GET    /businesses/:business_id/profit_loss_reports(.:format)                                                                    businesses/profit_loss_reports#index
                        businesses GET    /businesses(.:format)                                                                                                     businesses#index
                                   POST   /businesses(.:format)                                                                                                     businesses#create
                      new_business GET    /businesses/new(.:format)                                                                                                 businesses#new
                     edit_business GET    /businesses/:id/edit(.:format)                                                                                            businesses#edit
                          business GET    /businesses/:id(.:format)                                                                                                 businesses#show
                                   PATCH  /businesses/:id(.:format)                                                                                                 businesses#update
                                   PUT    /businesses/:id(.:format)                                                                                                 businesses#update
                                   DELETE /businesses/:id(.:format)                                                                                                 businesses#destroy

If you're using Rails 4+ you can do this using the param option in the resources method 如果您使用的是Rails 4+,则可以使用resources方法中的param选项来执行此操作

Overriding Route Parameters 覆盖路由参数

Assuming you have code that looks like 假设您的代码看起来像

resources :businesses

You can add an argument as such 您可以这样添加一个参数

resources :businesses, param: :business_id

Which should generate routes 哪个应该产生路线

                    businesses GET    /businesses(.:format)                                                                                                     businesses#index
                               POST   /businesses(.:format)                                                                                                     businesses#create
                  new_business GET    /businesses/new(.:format)                                                                                                 businesses#new
                 edit_business GET    /businesses/:business_id/edit(.:format)                                                                                            businesses#edit
                      business GET    /businesses/:business_id(.:format)                                                                                                 businesses#show
                               PATCH  /businesses/:business_id(.:format)                                                                                                 businesses#update
                               PUT    /businesses/:business_id(.:format)                                                                                                 businesses#update
                               DELETE /businesses/:business_id(.:format)

UPDATE UPDATE

Since you're generating these routes using the same nested resources you'll have to do the following 由于您使用相同的嵌套资源生成这些路线,因此必须执行以下操作

resources :businesses, param: :business_id 
resources :businesses, only: [] do
  resources :exports
  ...
end

A more clean way is to use the member更干净的方式是使用member

resources :businesses, param: :business_id do
  member do
    resources :exports
    ...
  end
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM