0

私はこの「CloudEdit」バックボーン チュートリアルhttp://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/をいじっています。これにより、「タイトル」と「本文」のプロパティを持つ「ドキュメント」を作成できます。データを「ドキュメント」URL に保存する Rails バックエンドを使用し、EditView を介してドキュメントを作成/編集します。簡単に言うと、保存のたびに this.model.save() の EditView の成功コールバックがトリガーされ、ビューの console.log() メッセージが「タイトル」と「本文」プロパティは、フォームに入力された値で設定されます。データベースを確認すると、ほとんどのレコードでタイトルと本文が「null」になっていますが、実際に入力された値が含まれているレコードはごくわずかです。このパターンは、データベースで約 4/5 が null を表示することなく、さらにレコードを追加しようとしても続きます。以下のコードに基づいて、その理由がわかるでしょうか。

データベースは、タイトルと本文のプロパティがほとんどのレコードで 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;
    }
});

View var EditView = Backbone.View.extend({ events: { "フォームを送信": "保存" },

    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 の create アクションです。

respond_to :json

     ...code ommitted...

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

ただし、これは puts params が明らかにするものであり、保護された属性の一括割り当てに関する警告があります。ただし、「ドキュメント」はモデルの属性でさえありません。

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'>
4

0 に答える 0