0

バックボーンを使用したRailsアプリがあります。コンソールでは、コレクションを作成し、サーバー(3)からドキュメントをフェッチして、長さを確認することで確認できます。

docs = new Docs();
docs.fetch();
docs.length
3

それらのドキュメントの1つを入手してください

d1 = docs.at(0)Object {cid = "c3"、changed = {...}、attributes = {...}、more ...}

ドキュメントを破棄する

d1.destroy(); DELETE http:localhost:3000 / docs /
1204コンテンツなし23msjquery.js?body = 1(8215行目)Object {readyState = 1、setRequestHeader = function()、getAllResponseHeaders = function()、more ...}

ドキュメントの長さを確認してください

>>> docs.length

2

新しいコレクションを作成する

docz = new Docs();

サーバーからドキュメントを取得します。「304未変更メッセージ」に注意してください

docz.fetch(); GET http:// localhost:3000 / docs 304 Not Modified 31ms
jquery.js?body = 1(line 8215)Object {readyState = 1、setRequestHeader = function()、getAllResponseHeaders = function()、more ...}

長さを確認してください。2になると思っていたのですが、3です。

>>> docz.length

3

明らかに3つのレコードがある場合、destroyを呼び出すと、コンテンツなしのメッセージが表示される理由がわかりません。

204 No Content
        23ms

データベースからレコードを取得するとき、データへのアクセスに問題はありません

d.get('title')
>>>"diet book"

モデルにURLが設定されているので、個々のレコードを削除できるはずです。

   url : function() {
       var base = 'docs';
       if (this.isNew()) return base;
       return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
    },

ただし、コレクションを経由して削除することもできませんdocs.at(0).destroyが、同じ効果があります。

これは、レールコントローラの破壊機能です

class DocsController < ApplicationController


    respond_to :json
    ....

   def destroy
     respond_with Doc.find(params[:id])
   end 
end 

モデル

 class Doc < ActiveRecord::Base
  attr_accessible :keywords, :text, :title
 end

更新 この投稿にコメントしたある人は、destroyを呼び出すと何かを破壊することになっていると述べましたが、オブジェクトに対してdestroyを呼び出すとオブジェクトが破壊されたと思いました

d.destroy()  #should destroy d, shouldn't it?

これは私がドキュメントから理解したことです

 book.destroy({success: function(model, response) {
  ...
}});

実際、オブジェクトに対してsave()を呼び出すと、オブジェクトがデータベースに保存されます。

d.save(); #this works, so why not d.destroy();
4

1 に答える 1

0

バックボーンコードでこれを行う場合:

d.destroy();

サーバーへのDESTROYリクエストをトリガーすると、クライアント側のモデルが破棄されてクリーンアップされます。サーバーコードは、サーバー側モデルを破棄してDESTROYリクエストを処理する必要があります。あなたのdestroyコントローラーはそれをしません:

def destroy
  respond_with Doc.find(params[:id])
end

データベースから適切なものDocを取り出してクライアントに送り返すだけです。destroyコントローラーはサーバー側モデルを破棄する必要があります。以下を含めるようにコントローラーメソッドを調整する必要があります。

doc = Doc.find(params[:id])
doc.destroy

findと呼び出しでのパーミッションチェック、エラーチェック、および例外処理も少しdestroy良い考えかもしれません。

于 2013-01-09T03:44:18.403 に答える