-1

我在我的应用程序中使用了rails 4和backbone。我创建的删除方法与骨干网,但是当我尝试用它来删除,我得到这个错误:Backbone.js - 删除错误的请求400(错误的请求)

DELETE http://localhost:3000/[object%20Object] 400 (Bad Request) 

我的删除方法:

deleteBook: (ev) -> 
    @model.destroy() 
) 

活动:

events: 
    "click .delete": "deleteBook" 

按上那个错误,它显示模型类型是text/html。所以我想我必须把它转换成json?

如果我这样做:

deleteBook: (ev) -> 
    @model.toJSON().destroy() 
) 

更新:

我在轨控制销毁方法(如果它的事项):

@book = Book.find(params[:id]) 
@book.destroy 

redirect_to '/' 

UPDATE2:

我的骨干型号:

$(document).ready -> 
    window.Book = Backbone.Model.extend(url: -> 
     (if @id then "/books/" + @id else "/books") 
     urlRoot: '/books/' 
    ) 

然后没有任何反应,我不会得到任何错误。所以我觉得我在这里做错了什么?

+0

我认为你的问题不在Backbone中,而是在你的服务器上。当你在模型中使用destroy时,它会启动一个ajax请求来永久删除它。 – Puigcerber

+0

@Puigcerber如果它在服务器中,我该如何修复它?如果这个问题很重要,我用我的导轨销毁方法更新了我的问题。 – Andrius

+0

您在模型中设置的URL必须与您在Rails中使用的URL相同。例如,如果您在您的书籍模型'urlRoot:'/ books /''中,您需要http:// localhost:3000/books/[id]指向您的Ruby方法。 – Puigcerber

回答

1

为什么在url中找到[object%20Object]? @id在这个地方

校验值:

(if @id then "/books/" + @id else "/books") 

值应该是一个数字,但我认为你有@id

+0

不,我有一个号码。看起来有什么错,是'urlRoot'在骨干模型里面的url函数里面。我把它搬出去,它开始破坏。 – Andrius

+0

我真的不明白这个语法,但是在Backbone for JS的url函数看起来像这样: 'windows.Book = Backbone.Model.extend(url:function(){ return(this.id)?'/books /'+ this.id:'/ books' } });' –

+0

这是一样的。我正在使用coffeescript,这就是为什么我不需要所有这些paranthesis等 – Andrius

1

后的物体在我张贴的评论一直在讨论它作为一个答案,所以你可以接受它来解决问题。

如果您在集合之外使用Backbone模型,则必须明确定义URL。您也可以定义id属性。

$(document).ready -> 
    window.Book = Backbone.Model.extend(
    urlRoot: '/books/' 
    idAttribute: 'id' 
) 

当你调用destroy()在该模型中骨干将启动一个Ajax请求删除永久使用HTTP请求DELETE http://localhost:3000/books/:id模型。

因此,您需要按照以下link将该URL映射到您的Ruby控制器。

干杯。