0

ネストされたさまざまなルートを 1 つのコントローラー アクションにどのようにポイントしますか?

ユーザーは、会社、プロジェクト、グループなどの複数のグループのメンバーになることができます。管理者による参加、脱退、または削除を要求できます。

複数のモデルの削除アクションにアクセスし、プロファイル モデルの属しているレコードを破棄したい

プロファイルからモデル(会社など) へのリクエストを受け取るポリモーフィック モデルが既にあり、リクエストが受け入れられると、プロファイルはモデルに属します。要求が受け入れられると、記録された要求は破棄されます。プロファイルとモデルの関係を破壊する削除アクションは 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)   

として

4

2 に答える 2

1

これを処理するために新しいコントローラーを作成することをお勧めしますか? 利点は、「関連付けの削除」が必要なモデルで、ルートをこのコントローラーにマップできることです。

例えば:

# 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

上記の行は、必要なネストされたルートの削除コントローラーにネストできます。これらはすべて、破棄アクションの実装に役立つさまざまなパラメーターを使用して、RemoteController の 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 の規則を破ることに注意する必要があると思います。これにマイナス面があるかどうかはわかりません。レコード自体ではなく関連付けのみを削除するため、削除部分は規則を破っていないようです。

于 2012-07-02T07:04:03.410 に答える
0

試す

puts 'remove', :on => :member, :controller => :requests, :action => :remove
于 2012-07-02T03:52:38.210 に答える