2010-03-30 5 views
4

Je cherche de l'aide pour détruire une ressource imbriquée dans Merb. Ma méthode actuelle semble presque correcte, mais le contrôleur déclenche un InternalServerError lors de la destruction de l'objet imbriqué.Je détruis des ressources imbriquées de façon reposante

vient ici tous les détails concernant la demande, ne pas hésiter à demander plus :)

Merci,

Alex


Je suis en train de détruire une des ressources imbriquées en utilisant la route suivante dans

router.resources :events, Orga::Events do |event| 
    event.resources :locations, Orga::Locations 
end 

Qui donne dans la requête jQuery (delete_ m ODE est une implémentation de .ajax $ avec "SUPPR"):

$.delete_("/events/123/locations/456"); 

Du côté du contrôleur de localisation, j'ai:

def delete(id) 
    @location = Location.get(id) 
    raise NotFound unless @location 
    if @location.destroy 
    redirect url(:orga_locations) 
    else 
    raise InternalServerError 
    end 
end 

Et le journal:

merb : worker (port 4000) ~ Routed to: {"format"=>nil, "event_id"=>"123", "action"=>"destroy", "id"=>"456", "controller"=>"letsmotiv/locations"} 
merb : worker (port 4000) ~ Params: {"format"=>nil, "event_id"=>"123", "action"=>"destroy", "id"=>"456", "controller"=>"letsmotiv/locations"} 
~ (0.000025) SELECT `id`, `class_type`, `name`, `prefix`, `type`, `capacity`, `handicap`, `export_name` FROM `entities` WHERE (`class_type` IN ('Location') AND `id` = 456) ORDER BY `id` LIMIT 1 
~ (0.000014) SELECT `id`, `streetname`, `phone`, `lat`, `lng`, `country_region_city_id`, `location_id`, `organisation_id` FROM `country_region_city_addresses` WHERE `location_id` = 456 ORDER BY `id` LIMIT 1 
merb : worker (port 4000) ~ Merb::ControllerExceptions::InternalServerError - (Merb::ControllerExceptions::InternalServerError) 

Répondre

0

Tous les navigateurs ne prennent pas réellement en charge l'envoi d'une véritable requête DELETE. Un travail commun consiste à utiliser un POST avec un paramètre spécial de "_method = DELETE".

En supposant que votre navigateur envoie réellement la demande DELETE, un backtrace ou d'autres informations de l'erreur seraient utiles pour le débogage ultérieur.

0

Il me semble que vous élever InternalServerError. Je pense qu'une meilleure façon de formuler la question serait "pourquoi est-ce que @ location.destroy retourne false?". Essayez-le dans la console et voyez, j'imagine que vous échouez à une sorte de callback * before_destroy *, ou peut-être à l'encontre d'une autre règle dans votre modèle Entity.

Questions connexes