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

乾杯。