我和Rails一起使用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
用户模型有很多电影,电影模型属于用户。
我一直在使用Backbone集合将电影添加到用户视图中,
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
,则应用程序崩溃。
那么用户,电影和Rails与Backbone之间的联系是什么?
答案 0 :(得分:5)
在现代Javascript中,服务器(Rails)和客户端(Backbone)之间的所有通信都是通过AJAX进行的(尽管有时也会使用表单提交)。在Backbone中,AJAX请求主要围绕两种方法:fetch
和save
(其他方法,如remove
也可以触发AJAX)。 fetch
从Rails获取数据并将其带入Backbone,而save则反过来并将Backbone中的数据传入Rails。
为了使您能够使用电影模型,您需要:
example.com/api/movie
),希望为电影提供JSON并将其保存为Rails记录Backbone.Model
,其url
属性指向Rails端点如果您有这两个并且在电影save
上致电Backbone.Model
,模型会将其attributes
以JSON形式发布到模型的网址,此时您的Rails端点可以接收该JSON并将其存储在您的数据库中。
类似地,当您在该电影模型上调用fetch
时,Backbone将向同一个URL发出AJAX请求,而不是POST,它将是GET请求。在这种情况下,Rails端点应该返回Movie的JSON表示,然后Backbone将转换为模型attributes
。
希望有所帮助。
P.S。由于User只是像Movie这样的另一个模型,所以我所说的关于Movie的所有内容同样适用于User。