以宁静的方式销毁嵌套资源

时间:2010-03-30 08:28:03

标签: jquery rest resources router merb

我正在寻找帮助销毁Merb中的嵌套资源。我当前的方法似乎接近正确,但控制器在销毁嵌套对象期间引发 InternalServerError

这里有关于请求的所有细节,请不要犹豫,要求更多:)

谢谢,

亚历


我正在尝试使用

中的以下路径销毁嵌套资源
router.resources :events, Orga::Events do |event|
  event.resources :locations, Orga::Locations
end

在jQuery请求中给出了什么(delete_方法是带有“DELETE”的$ .ajax的实现):

$.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 :(得分:0)

并非所有浏览器实际上都支持发送真正的DELETE请求。常见的解决方法是使用具有“_method = DELETE”特殊参数的POST。

假设您的浏览器实际上正在发送DELETE请求,则错误中的回溯或更多信息将有助于进一步调试。

答案 1 :(得分:0)

我认为正在引发InternalServerError。我想用一个更好的方式来表达问题的是“为什么@ location.destroy返回false?”。

在控制台中尝试一下,看看,我猜你在某种* before_destroy *回调中失败了,或者可能在你的实体模型中违反了另一条规则。