2014-10-18 58 views
1

我正在使用Rails和Backbone一起工作,我一直在學習很多東西,但是我遇到了一個問題,我無法包住頭。Backbone.js如何將數據保存在我的Rails模型中?

我有兩個模型,一個用戶和一個電影模型。

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 

用戶模型has_many電影和電影模型belongs_to用戶。

我一直在使用骨幹集合到一部電影添加到這樣的用戶認爲,

class Movieseat.Collections.Movieseats extends Backbone.Collection 

    url: '/api/movies' 
    defaults: 
    title: "" 

通過我的索引視圖

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) 

了,這是我的條目查看

class Movieseat.Views.Entry extends Backbone.View 

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

     render: -> 
     $(@el).html(@template(entry: @model)) 
     this 

這一切工作正常。我的頁面上有一些靜態文字的電影標題。當用戶點擊電影標題時,它會被添加到視圖中。但我不明白的是,電影標題的保存位置在哪裏?我如何使用Rails控制檯找到它?

我試着在控制檯中做一個Movie.all,該控制檯顯示了我用電影模型向電影中添加電影時製作的電影模型中的所有電影。它不顯示靜態標題的電影標題。但是,如果從用戶模型中刪除has_many :movies,則應用程序崩潰。

那麼User,Movies,Rails和Backbone之間的連接是什麼?

回答

5

在現代的Javascript中,服務器(Rails)和客戶端(Backbone)之間的所有通信都是通過AJAX進行的(儘管有時還會使用表單提交)。在Backbone中,AJAX請求主要圍繞兩種方法進行:fetchsave(其他方法,如remove也可以觸發AJAX)。 fetch從Rails獲取數據並將其帶入Backbone,同時保存相反的結果並將來自Backbone的數據導入到Rails中。

爲了與您的電影模式來工作,你需要:

  1. Rails的端點服務器上,要求被給予JSON的電影並將其保存爲一個Rails記錄(例如example.com/api/movie。)
  2. 一個Backbone.Model與如果你有這兩個,你叫save你的電影Backbone.Model模型WIL指向Rails的端點

一個url屬性l將它的JSON格式的attributes發佈到模型的URL,此時您的Rails端點可以接收該JSON並將其存儲在數據庫中。

同樣,當您在該Movie模型上調用fetch時,Backbone將向該同一個URL發出AJAX請求,而不是POST,它將成爲GET請求。在這種情況下,Rails端點應該返回Movie的JSON表示,然後Backbone將轉換爲模型attributes

希望有所幫助。

P.S.由於用戶只是電影的另一個模型,我所說的有關電影的所有內容同樣適用於用戶。

+0

這清除了我很多疑問。 – 2014-10-19 00:16:19

相關問題