2012-09-26 22 views
2

保存特定主幹模型時,我注意到當我檢查服務器上的PUT請求時,其中一個字段丟失。我有這樣的模式:Backbone.js保存方法將某些模型的屬性丟棄到服務器上PUT/POST

App.Models.User = Backbone.Model.extend({ 

    name: "user", 

    url: function() { 
     u = "/users" 
     if (this.id) { 
      u += "/" + this.id; 
     } 
     return u; 
    } 
}); 

App.Collections.Users = Backbone.Collection.extend({ 
    urlRoot: "/users", 
    model: App.Models.User 
}); 

我將它保存在瀏覽像這樣:

App.Views.EditUserForm = Backbone.View.extend({ 
    events: { 
     "submit": "saveUser" 
    }, 


    saveUser: function(e) { 
     e.preventDefault(); 
     var _id = this.$("#user_id").val(); 
     var data = { 
      id:   (_id !== '') ? _id : null, 
      first_name: this.$("#user_first_name").val(), 
      last_name: this.$("#user_last_name").val(), 
      email:  this.$("#user_email").val(), 
      bio:  this.$("#user_bio").val() 
     }; 

     var _this = this; 
     var user = new App.Models.User(); 

     // This will create or update a user 
     // record on the server 
     user.save(data,{ 
      success: _this.handleSuccess, 
      error: _this.handleErrors 
     }); 
    }, 

    handleSuccess: function(user, resp) { /* ... */ }, 
    handleErrors: function(user, resp) { /* ... */ } 
}); 

然而,當我到了服務器端(滑軌),該bio場是不是在要求的PARAMS:

(debugger) params[:user].keys 
[ "first_name", "last_name", "email" ] 

bio字段允許爲空,但使用在客戶端的調試器,我可以看到它的權利之前已在data = {...}對象的值被髮送到保存方法。

> data.bio 
"something, somthing, dark side" 

我還可以看到,當我使用收集到服務器上獲取現有對象,那場可用和填充。只有'model.save()'方法會將此值放在某個位置。任何想法爲什麼?謝謝。


更新 -

我可以看到bio場被髮送到服務器,但它不是在params[:user]而是在params哈希表的根:

(debugger) ap params 
{ 
     "id"   => "1", 
     "first_name" => "John", 
     "last_name" => "Doe", 
     "email"  => "[email protected]", 
     "bio"  => "something, somthing, dark side", 
     "user"  => { 
       "first_name" => "John", 
       "last_name" => "Doe", 
       "email"  => "[email protected]", 
     }, 
     "controller" => "users", 
     "action"  => "update" 
} 

什麼決定params [:user] *下的是什麼?

*對不起,如果這是更多的軌道問題比主幹。

回答

2

Got it!

發現只有在ActiveRecord::Base模型中標記爲attr_accessible的屬性將在更新或創建時添加到嵌套模型的參數中。以前我有

class User < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :email 
end 

因此,params[:user]包含只允許質量分配這些領域 - :first_name:last_name:email。將:bio添加到該列表解決了該問題,使我可以在我的控制器的update操作中使用@user.update_attributes(params[:user])

所以這不是一個Backbone問題,只是Rails配置。

相關問題