骨干破坏不发送params

ped*_*ete 11 destroy backbone.js ruby-on-rails-3

我有一个我试图销毁的骨干模型,但是没有与请求一起发送参数,因此服务器返回"删除404未找到"错误.

我承认我的结构有点奇怪,因为我根据它们是否已经在列表中创建/销毁这些项目.

var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id});

    if($(e.currentTarget).hasClass('add')){

            list_item.save(list_item, { 
                success: function(response){
                     this.model.attributes.addedtolist_id = response.id
                     console.log(this.model);
                },
                error: function(){
                     alert('could not save item');
                }
           });
    } else if($(e.currentTarget).hasClass('remove')) {
         list_item.id=this.model.addedtolist_id;
         list_item.attributes.id = this.model.addedtolist_id;
         console.log(list_item);
         list_item.destroy({
             success: function(){
                alert('delete');
             },
             error: function(){
               alert('could not uncheck');
            }
   });
}

list_item在销毁之前的控制台输出是

_escapedAttributes: Object
_previousAttributes: Object
_setting: false
attributes: Object
 id: 2
 item_id: 66
 group_id: 64
__proto__: Object
cid: "c23"
id: 2
__proto__: q

但是当我查看使用删除请求发送的标头时,我没有发送任何参数.

-----------------------更新params被发送,404仍然被退回--------------

根据Yaroslav的建议,我在destroy方法中添加了一个'header',但我的rails控制器仍然返回DELETE 404 not found错误.我只是想回到listitem,以确保在我销毁之前我得到了正确的一个.

我的控制器是

 def destroy
   listitem = Listitem.find(params[:id])
   return render :json => listitem
 end

mu *_*ort 30

我猜你url在模型中设置了一个字符串:

Backbone.Model.extend({
    url: '/list_items',
    //...
});
Run Code Online (Sandbox Code Playgroud)

这将告诉Backbone完全/list_items用作所有操作的URL.你应该使用一个函数:

url: function() { return '/list_items/' + encodeURIComponent(this.id) }
Run Code Online (Sandbox Code Playgroud)

或使用字符串,urlRoot并让默认url函数添加id:

urlRoot: '/list_items'
Run Code Online (Sandbox Code Playgroud)