我在我的应用中使用rails 4和backbone。我使用Backbone创建了删除方法,但是当我尝试使用它删除时,我收到此错误:
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()
)
更新
我在rails控制器中的destroy方法(如果重要):
@book = Book.find(params[:id])
@book.destroy
redirect_to '/'
UPDATE2:
My Backbone模型:
$(document).ready ->
window.Book = Backbone.Model.extend(url: ->
(if @id then "/books/" + @id else "/books")
urlRoot: '/books/'
)
然后没有任何反应,我不会得到任何错误。所以我觉得我在做错了什么?
答案 0 :(得分:1)
为什么在url中找到[object%20Object]?
在这个地方检查@id的值:
(if @id then "/books/" + @id else "/books")
值应该是一个数字,但我认为你在@id
中有一个对象答案 1 :(得分:1)
在评论中讨论后,我将其作为答案发布,以便您可以接受它来解决问题。
如果您在集合之外使用Backbone模型,则必须明确定义URL。您也可以定义id属性。
$(document).ready ->
window.Book = Backbone.Model.extend(
urlRoot: '/books/'
idAttribute: 'id'
)
当您在该模型中调用destroy()
时,Backbone将启动ajax请求,以使用HTTP请求DELETE http://localhost:3000/books/:id
永久删除模型。
因此,您需要在此link之后将该URL映射到Ruby控制器。
干杯。