2012-01-19 63 views
1

我有这个恼人的问题与Rails 3(红宝石1.9.2)和嵌套的资源。在我的路线:Rails 3销毁方法respond_with JS使用嵌套资源

resources :lists do 
    resources :items, only: [:destroy, :update, :create] 
end 

ItemsController具有respond_to :json在开始和#destroy看起来是这样的:

def destroy 
    @item = Item.find(params[:id]) 
    @item.destroy 
    respond_with @list, @item 
end 

摧毁项目链接:

<%= link_to 'x', list_item_path(@list, item), method: :delete, remote: true %> 

换算成正确的HTML ,如:

<a href="/lists/1/items/52" data-method="delete" data-remote="true" rel="nofollow">x</a> 

当我点击链接时,我的项目被正确删除,但方法总是返回{}。我一直在尝试修补它,但不能从空的JSON对象获得任何不同的东西!

其他方法(#create#update)按预期工作并返回JSON对象。

回答

2

我不完全确定你会期望它做什么。如果item被删除,JSON响应将是空的,因为它不能返回一个被销毁的对象。

随着createupdateitem对象仍然存在,因此它将返回作为JSON散列。

+0

我认为这是不正确的。该项目在数据库中被删除,但@ item项目仍然存在。另外,如果我对'@ item.destroy'行发表评论,它甚至不会从数据库中删除记录,并且仍然会返回{} –

+0

好吧,我一直在调查这个问题,你几乎是正确的。如果它是一个GET,那么我会得到这个对象,但是当你使用DELETE或者PUT时,rails只允许你把{}和状态OK作为响应。 –