레일 백엔드 API가 포함 된 연습용 백본 앱을 작성 중이며 백본 모델에서의 저장 동작에 대해 혼동스러워합니다.백본 모델이 저장시 서버에 중복 속성을 보내는 이유는 무엇입니까?
팀이 많은 플레이어를 보유하고 있다고 가정 해 봅시다. 수많은 플레이어가있는 팀을 단일 POST에 저장하려고합니다.
class Team < ActiveRecord::Base
has_many :players
accepts_nested_attributes_for :players
end
class Player < ActiveRecod::Base
belongs_to :team
end
및 백본 클라이언트, 나는 플레이어 모델과 (도시하지 않음)에 정의 된 선수 컬렉션
다음 포함 된 팀 모델 (참고가 : 레일에 따라서
나는 아니오 내가 브라우저에서 내 캐릭터 라인 JSON을 검토 할 때는 팀의 컬렉션)
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;
}
}
, 모든 것이 좋아 보인다 :
{"team_size":12, "players_attributes":[{"name":"Fred"},{"name":"Jim" },{"name":"Mark"}]}
최상위 레벨 속성 ('팀 크기')이 최상위 레벨에서 한 번 반복 된 다음 루트 키 아래에서 반복됩니다.
루트 키 안에 중첩 된 player_attributes을 보장하는 가장 좋은 방법은 무엇입니까 :
나는 몇 가지 질문이? 그래서 표준 레일 방식으로 TeamController 내부에 중첩 된 저장을 할 수 있습니다. (즉, Team.create (params [: team])) toJSON 내부의 일부 자바 스크립트 해커와 함께이 작업을 수행 할 수 있지만 쉽게 청소 방법.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} }
은? 나는 전혀 해가 없다 생각하지만, 잘 냄새가 나지 않는이 같은 속성의 중복을 보내려면이 기준, 바람직한 행동?입니다.
내가 URL을 정의하지나요/UrlRoot에 제대로 또는 일부 등?
감사
백본은 toJSON()의 결과를 정확하게 전송합니다. params.data = JSON.stringify (model.toJSON()); 속성 또는 뭔가 이상한 (로그에 낭비 가새가 있습니다). firebug에서 http 요청의 내용을 점검하여 누구를 비난해야하는지 확인하십시오. – Yaroslav
나는 ... 그것은에서오고 어떤 생각을 지금은 최적화하는 데 필요한 이것은 독이되고 ... 잠시 동안 백본 및 레일이 같은 문제를 했어? – wulftone
나는 내 경우에 (아마 당신도), 백본 비 중복 정보를 보내는 것으로 보인다 협조 할 것 같아요. Firebug는 내 서버로 보낸 POST 요청에 올바른 중복되지 않은 정보가 들어 있다고 말합니다. 그러나 루비 "params"로 바뀌기 전에 어딘가에 몇 가지 내용이 중복됩니다 ... 왜? – wulftone