Почему модель Backbone отправляет дубликаты атрибутов на сервер при сохранении?

Я пишу практическое приложение Backbone с API-интерфейсом Rails, и меня не устраивает поведение сохранения в моделях Backbone. .

Допустим, в команде много игроков, и я хочу сохранить команду с большим количеством игроков в одном 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}
  }

У меня есть несколько вопросов:

  1. Как лучше всего убедиться, что атрибуты player_attributes вложены в корневой ключ? Я (чтобы я мог сделать вложенное сохранение внутри TeamController, в стандартной манере рельсов: (т.е. Team.create(params[:team])) я могу выполнить это с помощью некоторого хакерства javascript внутри toJSON, но я предполагаю, что проще и чище.

  2. Является ли это стандартным, желательным поведением? Отправлять дубликаты атрибутов, подобные этому? Думаю, в этом нет ничего плохого, но это дурно пахнет.

  3. Я неправильно определяю url/urlRoot или что-то в этом роде?

спасибо

9
задан Nat Ritmeyer 22 September 2012 в 07:05
поделиться