Backbone.js - 删除错误请求400(错误请求)

时间:2013-10-30 11:09:56

标签: ruby-on-rails backbone.js coffeescript bad-request http-delete

我在我的应用中使用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/'
    )

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

2 个答案:

答案 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控制器。

干杯。