Уничтожение вложенных ресурсов спокойным способом - PullRequest
4 голосов
/ 30 марта 2010

Я ищу помощь в уничтожении вложенного ресурса в Мербе. Мой текущий метод выглядит почти правильным, но контроллер вызывает InternalServerError во время уничтожения вложенного объекта.

Здесь приведены все детали, касающиеся запроса, не стесняйтесь спрашивать больше:)

Спасибо

Alex


Я пытаюсь уничтожить вложенные ресурсы, используя следующий маршрут в

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

Что дает в запросе jQuery (метод delete_ является реализацией $ .ajax с "DELETE"):

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

На стороне контроллера местоположения у меня есть:

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

и журнал:

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)

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Мне кажется, вы вызываете InternalServerError. Я думаю, что лучший способ сформулировать вопрос - «почему @ location.destroy возвращает false?».

Попробуйте в консоли и увидите, я предполагаю, что вы не выполняете какой-то обратный вызов * before_destroy * или, возможно, сталкиваетесь с другим правилом в вашей модели Entity.

0 голосов
/ 22 марта 2011

Не все браузеры поддерживают отправку реального запроса DELETE. Обычный обходной путь - использовать POST со специальным параметром "_method = DELETE".

Если ваш браузер действительно отправляет запрос DELETE, обратная трассировка или некоторая дополнительная информация об ошибке будет полезна для дальнейшей отладки.

...