特定のバックボーン モデルを保存するときに、サーバーで PUT 要求を調べたときに、フィールドの 1 つが欠落していることに気付きました。私はこのモデルを持っています:
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) { /* ... */ }
});
ただし、サーバー側 (Rails) に到達すると、bio
フィールドはリクエストのパラメーターにありません:
(debugger) params[:user].keys
[ "first_name", "last_name", "email" ]
そのbio
フィールドは null にすることができますが、クライアント側のデバッガーを使用するdata = {...}
と、save メソッドに送信される直前にオブジェクトに値があることがわかります。
> data.bio
"something, somthing, dark side"
また、コレクションを使用してサーバー上の既存のオブジェクトを取得すると、そのフィールドが使用可能になり、値が設定されていることがわかります。「model.save()」メソッドだけが途中でその値を落としています。理由はありますか?ありがとう。
アップデート -
bio
フィールドがサーバーに送信されたことがわかりますが、それparams[:user]
は params ハッシュの下ではなくルートにあります。
(debugger) ap params
{
"id" => "1",
"first_name" => "John",
"last_name" => "Doe",
"email" => "john@bleh.com",
"bio" => "something, somthing, dark side",
"user" => {
"first_name" => "John",
"last_name" => "Doe",
"email" => "john@bleh.com",
},
"controller" => "users",
"action" => "update"
}
params[:user]* の下にあるものを決定するものは何ですか?
*これがバックボーンというよりもレールに関する質問になっている場合は申し訳ありません。