成功回调已触发,但文档未保存

时间:2013-01-25 00:00:11

标签: backbone.js

我正在使用这个'CloudEdit'骨干教程http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/,它允许您创建一个带有“标题”和“正文”属性的“文档”。它使用Rails后端将数据保存到“文档”URL,并通过EditView创建/编辑文档。总而言之,即使在每次保存时触发this.model.save()上的EditView中的成功回调,并且即使视图中的console.log()消息显示“标题”和'body'属性是使用在表单上输入的值设置的,当我检查数据库时,大多数记录对于标题和正文都有'null',而只有少数记录实际上具有输入的值。当我尝试添加更多记录时,此模式仍在继续,而数据库中没有大约4/5显示null。根据下面的代码,你能看出原因可能是什么,以及我如何解决它?

注意,数据库显示大多数记录的标题和正文属性为空,即这不是骨干不能正确检索数据的问题。它没有得到妥善保存。 的模型

window.Document = Backbone.Model.extend({
    url : function() {
      var base = 'documents';
      if (this.isNew()) return base;
      return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
    }
});

查看     var EditView = Backbone.View.extend({         事件:{             “提交表格”:“保存”         },

    initialize: function() {
        this.render();
    },

    save: function() {
        var self = this;
        var msg = this.model.isNew() ? 'Successfully created!' : "Saved!";
        var tit  = this.$('[name=title]').val(); 
        console.log(tit);
        var bod = this.$('[name=body]').val();
        console.log(bod);

        this.model.save({ title: this.$('[name=title]').val(), body: this.$('[name=body]').val() }, {
            success: function(model, resp) {
                // new App.Views.Notice({ message: msg });
                console.log("save");
                self.model = model;
                self.delegateEvents();

            },
            error: function(r) {
                console.log(r);
            }
        });

        return false;
    },

    render: function() {
        ...template rendering code...
    }
});

更新回应

的评论

这是documents_controller.rb

的创建操作
respond_to :json

     ...code ommitted...

    def create
        puts params
        respond_with Document.create(:document => params[:document])
    end 

然而,这就是看跌期权所揭示的内容,有关于大量分配受保护属性的警告。但是,“文档”甚至不是模型的属性。

Processing by DocumentsController#create as JSON
  Parameters: {"title"=>"hop", "body"=>"hot", "document"=>{"title"=>"hop", "body"=>"hot"}}
WARNING: Can't mass-assign protected attributes: document
   (0.1ms)  begin transaction
  SQL (80.4ms)  INSERT INTO "documents" ("body", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?)  [["body", nil], ["created_at", Fri, 25 Jan 2013 23:20:51 UTC +00:00], ["title", nil], ["updated_at", Fri, 25 Jan 2013 23:20:51 UTC +00:00]]
   (7.3ms)  commit transaction
Completed 201 Created in 127ms (Views: 31.9ms | ActiveRecord: 0.0ms)

根据以下表单输入重写了这样的创建动作

    def create

      respond_with Document.create(:title => params[:title], :body => params[:body])

    end

#form input names
<input name='title' type='text'/> 
<textarea name='body'>

0 个答案:

没有答案