0

これは Backbone.JS と ActiveRecord に関する Noob の質問です。これをデバッグする方法についてのポインタに感謝します。

Backbone.Js コードを使用して、単一の属性「name」(文字列) を持つ「Trainer」オブジェクトを作成しようとしています。アプリケーションのフロントエンドは Ruby on Rails です。Trainer テーブルのデータ移行があります。

トレーナーコントローラーで:

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

次に、app/assets/javascripts/backbone/views/trainers/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」が設定されていても、テンプレートから取得され、Trainer オブジェクトの属性であるパラメーター「name」がデータベースに取得されません。

これをデバッグする方法についてのポインタをいただければ幸いです。明らかに、Backbone.js と ActiveRecord がどのように接続されているかを理解していません。

4

1 に答える 1

0

コントローラーはブラウザーからのリクエストを受け取り、データを ActiveRecord に入れます。

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

しかし、ログにリクエストが表示されparams[:trainer]、空のハッシュに等しい{}

次のようなハッシュでjsonを作成するjavascriptを変更できます

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

バックボーンでこれがどれほど簡単かわかりません。

または、次のように、コントローラーを変更して、ハッシュから値を取得し、トレーナー モデルの新しいハッシュを構築することもできます。

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

これを冗長にしたのは、これを使用すると、フォーマットを制御できないサードパーティからのものであっても、json が入ってきたものを翻訳できることを示すためです。

于 2012-11-07T21:12:34.300 に答える