Backbone.js如何在我的Rails模型中保存数据?

Pet*_*sma 1 ruby-on-rails backbone.js

我正在使用Rails和Backbone,我已经学到了很多,但我遇到了一个问题,我无法解决这个问题.

我有两个模型,一个用户和一个电影模型.

ActiveRecord::Schema.define(version: 20141016152516) do

  create_table "movies", force: true do |t|
    t.string   "title"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
  end

  create_table "users", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "password_digest"
    t.string   "remember_digest"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true

end
Run Code Online (Sandbox Code Playgroud)

用户模型具有多部电影,电影模型为belongs_to用户.

我一直在使用Backbone集合将电影添加到用户的视图中,就像这样,

class Movieseat.Collections.Movieseats extends Backbone.Collection

  url: '/api/movies'
  defaults: 
    title: "" 
Run Code Online (Sandbox Code Playgroud)

通过我的索引视图

class Movieseat.Views.MovieseatsIndex extends Backbone.View

  template: JST['movieseats/index'] 

  initialize: -> 
    @collection.on('update', @render, this)
    @collection.on('add', @appendEntry, this)

  render: -> 
    $(@el).html(@template())
    @collection.each(@appendEntry)
    this

  events: -> 
    "click li": "addEntry" 

  addEntry: (e) -> 
    movie_title = $(e.target).text()
    @collection.create title: movie_title

  appendEntry: (entry) ->
    view = new Movieseat.Views.Entry(model: entry)
    $('#entries').append(view.render().el)
Run Code Online (Sandbox Code Playgroud)

这是我的条目视图

    class Movieseat.Views.Entry extends Backbone.View

      template: JST['movieseats/entry']
      className: 'movie-frame'

      render: -> 
        $(@el).html(@template(entry: @model))
        this
Run Code Online (Sandbox Code Playgroud)

这一切都很好.我的页面上有一些静态文本的电影.当用户点击电影标题时,它会被添加到视图中.但我不明白的是,电影片名在哪里得到保存?我怎样才能使用Rails控制台找到它?

我尝试Movie.all在控制台中进行操作,显示我在使用表单向模型添加电影时制作的电影模型中的所有电影.它不显示静态标题的电影标题.但是如果has_many :movies从用户模型中删除应用程序崩溃.

那么用户,电影和Rails与Backbone之间的联系是什么?

mac*_*ost 5

在现代Javascript中,服务器(Rails)和客户端(Backbone)之间的所有通信都是通过AJAX进行的(尽管有时也会使用表单提交).在骨干具体地说,AJAX请求主要围绕两种方法:fetchsave(其他方法,例如remove也可以触发AJAX). fetch从Rails获取数据并将其带入Backbone,而save则反过来并将Backbone的数据带入Rails.

为了使其与您的电影模型一起使用,您需要:

  1. example.com/api/movie服务器上的Rails端点(例如),希望为电影提供JSON并将其保存为Rails记录
  2. a Backbone.Model具有url指向Rails端点的属性

如果您有这两个并且您调用save了Movie Backbone.Model,模型将以attributesJSON格式将其POST 到模型的URL,此时您的Rails端点可以接收该JSON并将其存储在您的数据库中.

类似地,当你调用fetch那个Movie模型时,Backbone会向同一个URL发出一个AJAX请求,而不是POST,它将是一个GET请求.在这种情况下,Rails端点应返回Movie的JSON表示,然后Backbone将转换为model attributes.

希望有所帮助.

PS因为用户只是像电影这样的另一个模型,所以我所说的关于电影的一切同样适用于用户.