-1

我在我的应用程序中使用 rails 4 和主干。我使用 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 控制器中的销毁方法(如果重要):

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

redirect_to '/'

更新2:

我的骨干模型:

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

然后什么都没有发生,我不会得到任何错误。所以我认为我在这里做错了什么?

4

2 回答 2

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

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

干杯。

于 2013-10-30T14:18:14.933 回答
1

为什么在 url 中定位 [object%20Object]?

在这个地方检查@id的值:

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

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

于 2013-10-30T13:28:22.490 回答