不能坚持销毁到数据库,可以检索

时间:2013-01-09 02:11:10

标签: ruby-on-rails backbone.js

我有一个使用骨干的rails应用程序。在控制台中,我可以创建一个集合,从服务器(3)中获取文档,我通过检查长度

来确认
  
    
      

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

    
  

获取其中一个文档

  
    
      

d1 = docs.at(0)           对象{cid =           “C3”           ,更改= {...},属性= {...},更多...}

    
  

销毁文档

  
    
      

d1.destroy();           删除http:localhost:3000 / docs / 1
          204无内容23ms           jquery.js?body = 1(第8215行)           对象{readyState =           1           ,setRequestHeader = function(),getAllResponseHeaders = function(),more ...}

    
  

检查文档的长度

>>> docs.length

2

创建新集合

  
    
      

docz = new Docs();

    
  

从服务器获取文档。请注意“304 Not modified message”

  
    
      

docz.fetch();           获取http:// localhost:3000 / docs           304未修改                   31毫秒
          jquery.js?body = 1(第8215行)           对象{readyState =           1           ,setRequestHeader = function(),getAllResponseHeaders = function(),more ...}

    
  

检查长度。这是3,当我预计它是2.

>>> docz.length

3

我不知道为什么当我打电话给我时,如果有3条记录,我会收到一条无内容信息​​

204 No Content
        23ms

当我从数据库中检索记录时,我没有访问数据的问题

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

我在模型上设置了一个网址,所以我应该能够删除我认为的单个记录

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

但是,我也无法删除通过集合docs.at(0).destroy具有相同的效果。

这是我在rails控制器中的销毁功能

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();

1 个答案:

答案 0 :(得分:0)

在Backbone代码中执行此操作时:

d.destroy();

您将触发对服务器的DESTROY请求,客户端模型将被销毁并清理。您的服务器代码必须通过销毁服务器端模型来处理DESTROY请求;你的destroy控制器没有这样做:

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

所有这一切都是从数据库中提取适当的Doc并将其发送回客户端:您的destroy控制器需要销毁服务器端模型。您需要调整控制器方法以包括:

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

finddestroy来电进行一些权限检查,错误检查和异常处理也是个好主意。