Rieles: apunte varias rutas anidadas a una acción del controlador del cliente

¿Cómo apunta diferentes rutas anidadas a una acción de controlador?

Un usuario puede ser miembro de varios grupos como empresa, proyecto, grupo, etc. por lo que puede solicitar unirse, salir o ser eliminado por un administrador.

Quiero acceder a la acción de eliminación de varios modelos y destruir el registro pertenece_a en el modelo de perfil

Ya tengo un modelo polimórfico que lleva solicitudes de un perfil a un modelo(Ej. empresa) y al aceptar la solicitud el perfil pertenecerá al modelo. una vez aceptada la solicitud, la solicitud registrada se destruye. Siento que la acción de eliminar destruirá la relación entre el perfil y el modelo debería ser parte de request_controller, pero supongo que podría ser parte de profile_controller.

Lo que estoy pensando en lo que necesito terminar es

/_model_/:id/profile/:id/remove
/company/:id/profile/:id/remove

pero ¿cómo hago para que esto señale la acción de eliminación en mi controlador de solicitudes?

or

/_model_/:id/requests/remove
/company/:id/request/remove

Estoy usando el siguiente código en mis rutas.

resources :companies do
   resource :requests do
     put 'remove', :on => :member 
   end
   resources :requests do
      put 'accept', :on => :member
   end
 end

Esto está produciendo una duplicación de las rutas.

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)   

As

preguntado el 02 de julio de 12 a las 03:07

2 Respuestas

¿Te sugiero que crees un nuevo controlador para manejar esto? La ventaja es que puede asignar la ruta a este controlador en cualquier modelo en el que desee "eliminar asociación".

Por ejemplo:

# 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

Las rutas anteriores generarían:

company_requests_remove DELETE /companies/:company_id/requests/remove(.:format)          remove#destroy

Puede anidar la línea anterior para el controlador de eliminación en cualquier ruta anidada que desee y todas apuntarán al objeto de destrucción de RemoteController, solo con diferentes parámetros para ayudarlo a implementar la acción de destrucción.

Editar: para agregar crear para una relación específica que no desea duplicar, puede hacer esto:

# 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

Pero creo que debe tener cuidado al romper la convención de crear en el controlador respectivo. No estoy seguro de si hay algún inconveniente en esto. La parte de eliminación, ya que solo elimina la asociación y no los registros en sí, no parece romper la convención.

Respondido 02 Jul 12, 09:07

¿Qué implicaría extender eso a un controlador de relaciones para que una acción personalizada de aceptación (creación) que tengo en mi controlador de solicitudes se convierta en la acción de creación? Aarón Dufall

Lo siento, no entendí muy bien tu pregunta anterior. ¿Puedes aclarar un poco? ¡Gracias! - yuklai

En realidad, si te entiendo bien, déjame editar la solución anterior y ver si eso responde a tu pregunta. - yuklai

Trata

puts 'remove', :on => :member, :controller => :requests, :action => :remove

Respondido 02 Jul 12, 04:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.