Rails バックエンド API を使用して練習用のバックボーン アプリを作成していますが、バックボーン モデルの保存の動作について混乱しています。
チームに多くのプレイヤーがいて、多数のプレイヤーがいるチームを 1 回の POST で保存したいとします。
したがって、Rails には次のようなものがあります。
class Team < ActiveRecord::Base
has_many :players
accepts_nested_attributes_for :players
end
class Player < ActiveRecod::Base
belongs_to :team
end
バックボーン クライアントの場合、Player モデルと Players コレクションが定義されています (表示されていません)。
次に、それを含む Team モデル (注: Teams コレクションはありません)
Demo.Models.Team = Backbone.Model.extend({
urlRoot: '/teams',
defaults: {
'team_size': 12
},
initialize: function() {
this.players = new Demo.Collections.Players());
},
toJSON: function() {
var json = _.clone(this.attributes);
json.players_attributes = this.players.map(function(player) {
return player.toJSON();
});
return json;
}
}
ブラウザーで文字列化された JSON を調べると、すべて問題ないように見えます。
{"team_size":12, "players_attributes":[{"name":"Fred"},{"name":"Jim" },{"name":"Mark"}]}
サーバー ログを確認すると、唯一の最上位属性 (「チーム サイズ」) が最上位で一度繰り返され、次にルート キーの下で繰り返されます。
Started POST "/teams" for 127.0.0.1 at 2012-06-07 13:39:40 -0400
Processing by TeamsController#create as JSON
Parameters: {
"team_size"=>12, "players_attributes":[{"name":"Fred"},{"name":"Jim" },{"name":"Mark"}]},
"team"=>{"team_size"=>12}
}
いくつかの質問を聞きたいんです:
player_attributes がルート キー内にネストされていることを確認する最善の方法は何ですか? I (標準的なレールの方法で、TeamController 内でネストされた保存を実行できるようにするため: (つまり、Team.create(params[:team]))より簡単でクリーンな方法。
これは標準的で望ましい動作ですか? このような属性の複製を送信するには? 害はないと思いますが、匂いがしません。
url / urlRoot を正しく定義していませんか?
ありがとう