我正在编写一个练习Backbone应用程序,使用Rails后端API,我对在Backbone模型上保存的行为感到困惑.
假设一个团队有很多玩家,我想在一个POST中保存一个拥有众多玩家的团队.
所以在Rails中我有:
class Team < ActiveRecord::Base
has_many :players
accepts_nested_attributes_for :players
end
class Player < ActiveRecod::Base
belongs_to :team
end
Run Code Online (Sandbox Code Playgroud)
对于骨干客户端,我有一个Player模型和一个Players集合定义(未显示)
然后是包含团队模型(注意:没有团队集合)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中检查我的字符串化JSON时,一切看起来都很好:
{"team_size":12, "players_attributes":[{"name":"Fred"},{"name":"Jim" },{"name":"Mark"}]}
Run Code Online (Sandbox Code Playgroud)
检查服务器日志,重复一次顶级属性('团队大小'),一次在顶层,然后在根密钥下重复.
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" …Run Code Online (Sandbox Code Playgroud) 我有一个游戏模型,我想在创建时进行批量分配:
def create
game = Game.new(params[:game])
...
end
Run Code Online (Sandbox Code Playgroud)
但Backbone发送模型属性而不将它们包装在"游戏"参数中,我必须这样做:
def create
game = Game.new(:title=>params[:title], ... )
...
end
Run Code Online (Sandbox Code Playgroud)
我希望我的控制器干净,如何使用Backbone.js进行质量分配?
我正在使用rails并学习Backbone.
请帮帮我.有没有办法在保存时设置正确的模型?例如,当我创建具有一些参数的新用户并尝试将其保存到数据库中时, - 在服务器端,我没有用户作为对象,而是用户字段在params中.只有保存用户的方法是手动设置属性:
user = User.new(:login => params[:login], :password => params[:password]).save!
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以生成真实的用户模型对象(比如form_for生成)?我认为下面描述的操作我将需要在我更新用户时使用等等.
谢谢!