我這樣做的時候,最簡單的方法,我相信是剛剛調整path_names。這樣你的路由名稱就不會混亂。讓我解釋。
方案1 - 標準導軌
代碼
resources :books
輸出
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
DELETE /books/:id(.:format) books#destroy
方案2克里斯 - 希爾德版本
代碼
resources :books do
get "new/:template_id", to: "books#new_wp", on: :collection
end
# You can also do, same result with clearer intention
# resources :books do
# get ":template_id", to: "books#new_wp", on: :new
# end
輸出
GET /books/new/:template_id(.:format) books#new_wp
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
DELETE /books/:id(.:format) books#destroy
方案3 - 我的優選的和由上述steakchaser
代碼
resources :books, path_names: {new: 'new/:template_id' }
輸出
注意到
您會注意到,在場景2中,您缺少一個路徑名,這意味着您需要添加一個as: :new
,這將生成new_new_book
。修復此問題,您可以將get ":template_id" ...
更改爲get path: ":template_id"...
,這將生成new_book
如果您只想爲新的傳遞參數,則我的首選項是方案3。如果您想更改操作,那麼您應該考慮使用方案2,但不包括來自資源的:new
,或者在您的情況下不要將:new
添加到only:
參數中。
好吧,我已經添加了一個:as =>:new,因爲如果沒有,它不會生成路線的快捷方式。問題仍然存在,那就是:以這種方式生成的快捷方式是複數:new_books,它應該生成一個單獨的版本:-( – AgostinoX
你希望它在收集,而不是成員。 –
你是對的,像這樣它的作品,我只是觀察指定資源時自動執行的「新」,僅限於單數。 – AgostinoX