[英]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.