[英]Rails: Point several nested routes to one customer controller action
如何將不同的嵌套路由指向一個控制器動作?
用戶可以是公司,項目,組等多個組的成員。 為此,它可以請求加入,離開或被管理員刪除。
我想訪問幾個模型的remove動作並銷毀個人檔案模型中的belongs_to記錄
我已經有了一個多態模型,該模型將概要文件中的請求接收到模型 (例如公司),並且在接受請求后,概要文件將屬於該模型 。 接受請求后,重新記錄的請求將被銷毀。 我認為將破壞概要文件與模型之間的關系的刪除動作應該是requests_controller的一部分,但我想可能是profile_controller的一部分。
我想我最終要選擇的是
/_model_/:id/profile/:id/remove
/company/:id/profile/:id/remove
但是我如何獲得此指向我的請求控制器中的刪除操作
要么
/_model_/:id/requests/remove
/company/:id/request/remove
我在路線中使用以下代碼
resources :companies do
resource :requests do
put 'remove', :on => :member
end
resources :requests do
put 'accept', :on => :member
end
end
這使路線增加了一倍
remove_company_requests PUT /companies/:company_id/requests/remove(.:format)
company_requests POST /companies/:company_id/requests(.:format)
new_company_requests GET /companies/:company_id/requests/new(.:format)
edit_company_requests GET /companies/:company_id/requests/edit(.:format)
GET /companies/:company_id/requests(.:format)
PUT /companies/:company_id/requests(.:format)
DELETE /companies/:company_id/requests(.:format)
accept_company_request PUT /companies/:company_id/requests/:id/accept(.:format)
GET /companies/:company_id/requests(.:format)
POST /companies/:company_id/requests(.:format)
new_company_request GET /companies/:company_id/requests/new(.:format)
edit_company_request GET /companies/:company_id/requests/:id/edit(.:format)
company_request GET /companies/:company_id/requests/:id(.:format)
PUT /companies/:company_id/requests/:id(.:format)
DELETE /companies/:company_id/requests/:id(.:format)
如
我我建議您創建一個新的控制器來處理此問題? 好處是您可以在要“刪除關聯”的任何模型上映射到該控制器的路由。
例如:
# RemoveController.rb
class RemoveController < ApplicationController
def destroy
# inplement the logic for deletion. You can use refection to implement
# this function only once for all the applied associations.
end
end
# routes.rb
resources :companies do
resource :requests do
resource :remove, :controller => :remove, :only => [:destroy]
end
end
以上路線將產生:
company_requests_remove DELETE /companies/:company_id/requests/remove(.:format) remove#destroy
您可以將remove控制器的上述行嵌套在所需的任何嵌套路由上,並且它們都將指向RemoteController的destroy對象,僅使用不同的參數來幫助您實現destroy操作。
編輯:為不想重復的特定關系添加創建,您可以執行以下操作:
# routes.rb
resources :companies do
resource :requests do
resource :remove, :controller => :relationship, :only => [:destroy]
resource :create, :controller => :relationship, :only => [:create]
end
end
company_requests_remove DELETE /companies/:company_id/requests/remove(.:format) relationship#destroy
company_requests_create POST /companies/:company_id/requests/create(.:format) relationship#create
但是我認為您可能需要注意打破各自控制器中的create約定。 我不確定這是否有不利之處。 因為除去部分僅除去關聯而不是記錄本身,所以它似乎沒有違反約定。
嘗試
puts 'remove', :on => :member, :controller => :requests, :action => :remove
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.