Backbone.js and ActiveRecord



这是关于backbone.js和activerecord的菜鸟问题。我很感激如何调试这个指针。

我正在尝试使用backbone.js代码来创建一个"训练器"对象,该对象具有单个属性,"名称"(字符串)。应用程序的前端是轨道上的红宝石。培训师表有数据迁移。

在培训师控制器中:

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

现在,在App/Assets/javascripts/backbone/tiews/triewers/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中设置了参数"名称",即使参数为"名称"。

我会感谢有关如何调试此调试的指针 - 显然我不了解backbone.js和activerecord是如何连接的。

控制器从浏览器中获取请求,并将数据放入ActivereCord:

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

,但是随后您在日志中看到请求,params[:trainer]等于空哈希 {}

您可以更改它可以用

的哈希创建JSON的JavaScript
{ 'trainer': {'name' : 'Lori stevens', ... }}

我不知道这在骨干中有多容易。

或者您可以更改控制器,因为它可以从哈希(Hash)中获取值,并为您的教练模型构造新的哈希(Hash),就像以下方式:

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

我使这个详细说明,以表明您可以翻译JSON的内容,即使它来自您无法控制格式的第三方。

最新更新