2012-11-07 28 views
0

这是一个关于Backbone.JS和ActiveRecord的Noob问题。 我将不胜感激关于如何调试这个指针。我试图使用Backbone.Js代码来创建一个“培训师”对象,其中有一个单一的属性,“名称”(字符串)。 该应用程序的前端是Ruby on Rails。 Trainer表有数据迁移。Backbone.js和ActiveRecord

在教练员控制器:现在

def create 
    document = Trainer.create! params[:trainer] 
    render :json => document 
end 

,在app /资产/ Java脚本/骨干网/视图/培训/ new_view.js:

Gym.Views.Trainers.NewView = Backbone.View.extend({ 
    el : 'div.trainer_form', 
    template: JST['backbone/templates/trainers/new_template'], 
    model : new window.Gym.Models.Trainer({}), 
    initialize: function() { 
    this.document = this.options.user; 
    Backbone.Validation.bind(this, { 
    invalid: function(view, attr, error) { 
     $("form#new-trainer .errors ul").append("<li>" + error + "</li>") 
    } 
    }); 
    this.render(); 
}, 
render : function() { 

    $(this.el).html(this.template({trainer:this.model.toJSON()})); 
    return this 
}, 
events : { 
    "click input#submit_button" : 'create_trainer' 
}, 


create_trainer : function(event) { 
    event.preventDefault() 
    params = $("form#new-trainer").formParams() 
    params['user_id'] = Gym.currentUser.userId 
    this.model.save(params, {success : function(model, response) { 
    Gym.trainers.add(model) 
    Objects.views.selectTrainer.render() 

    Gym.current_trainer = model 

    $("select#trainer_selector").val(Gym.current_trainer.get('id')) 

    Objects.views.new_trainer.model = new Gym.Models.Trainer() 
    Objects.views.new_trainer.render() 

    } 
    }); 

现在,我可以在Rails的日志中看到那我越来越控制器:

Started POST "/trainers" ... 
Processing by TrainersController#create as JSON 
Parameters: {"name"=>"Lori Stevens", "user_id"=>1, "trainer"=>{}} 

然而,当它到达的SQL,我看到:

[1m^[[36mSQL (0.4ms)^[[0m ^[[1mINSERT INTO `trainers` (`created_at`, `name`, `updated_at`, `user_id`) VALUES ('2012-11-07 20:33:09', NULL, '2012-11-07 20:33:09', NULL)^[[0m 

即使在JSON中设置了参数“name”,参数'name'(来自模板,并且是Trainer对象的属性)也没有进入数据库。

我很欣赏一个关于如何调试的指针 - 显然我不明白Backbone.js和ActiveRecord是如何连接的。

回答

0

的控制器接受请求从浏览器和数据置于ActiveRecord的:

def create 
    document = Trainer.create! params[:trainer] 
    ... 
end 

但你在日志中看到的请求,params[:trainer]等于空哈希{}

您可以更改它创建JSON的哈希像

{ 'trainer': {'name' : 'Lori stevens', ... }} 

我不知道这是多么容易在骨干。

或者你可以改变你的控制器,它得到的值进行散列,构建一个新的哈希为你的教练机型,喜欢的话是:

gotten_name_from_json = params['name'] 
... 
document = Trainer.create!(
    {:name => gotten_name_from_json, :town => gotten_twon_from_json}) 

我做了这个冗长表明,使用这个你可以翻译甚至当它来自你无法控制格式的第三方时,json即将进入。

+0

谢谢@Meier。我明白你的意思。在我提出的代码中,params [:trainer]通常设置在哪里?它会在create_trainer的开头:function(event)? – sploiber