这是一个关于通过 Backbone 在 Rails 应用程序中创建数据库条目的长问题。我对如何处理 Rails 控制器中的数据以及如何在骨干网中设置 url 有疑问。
我在 Rails 中创建了一个包含标题、文本和关键字列的 Docs 表,让 Rails 自动创建 id 列。我尝试在控制台中创建两个文档,d7 和 d8。
在 d7 中,我尝试手动设置 id 和标题。当我尝试“保存”它时,它给了我一个 500 错误。
在 d8 中,我制作了一个只有标题的文档。当我尝试保存它时,它给了我一个 404 错误。
使用手动设置的 id 和标题创建文档 (d7)
d7 = new Doc({ id: '007', title: 'Document 7'})
Doc Constructor french2.js:24
child
尝试保存 d7 会产生 500 错误
d7.save({}, { success : function(rec) {console.log('saved : ', rec); } })
PUT http://localhost:3000/docs/007 500 (Internal Server Error) jquery.js:8215
XHR finished loading: "http://localhost:3000/docs/007". jquery.js:8215
Object {readyState: 4, responseText: "<!DOCTYPE html>↵<html lang="en">↵<head>↵ <meta ch…ders</b>: <pre>None</pre></p>↵↵↵↵</body>↵</html>↵", status: 500, statusText: "Internal Server Error"}
它还在 DocsController#update 未定义方法 'stringify_keys' 中添加了“NoMethodError”
创建一个只有标题,没有 id 的文档(d8)(Rails 手动设置 id)
d8 = new Doc({title: 'Document 8'})
Doc Constructor french2.js:24
child
尝试在没有手动设置 id 的情况下保存文档会产生 404 错误
Object
POST http://localhost:3000/docs/undefined 404 (Not Found) jquery.js:8215
XHR finished loading: "http://localhost:3000/docs/undefined". jquery.js:8215
Object {readyState: 4, responseText: "<!DOCTYPE html>↵<html lang="en">↵<head>↵ <meta ch…ation on available routes.↵</p>↵↵</body>↵</html>↵", status: 404, statusText: "Not Found"}
4个问题:
1) 是否在 Backbone Doc 模型中正确设置了 url,以便使用 Rails 资源。 this.url = "docs/" + this.id
有关完整代码,请参阅下面的文档模型。
2) 我应该调用 save d7.save()
来创建文档吗?我注意到它触发了 Rails 文档控制器中的更新操作?
3) 如何在不出现字符串化键错误的情况下保存字符串?
4) Rails 控制器:我的 docs 表有 3 个字段(标题、关键字、文本)以及 rails 添加的任何内容。我是否必须通过参数中的列名明确识别每个字段(即 params[:title][:keywords])还是下面的代码(我从其他人那里复制)是否正确,其中仅指定了符号 :doc ? 参数的名称是任意的吗?
def create
respond_with Doc.create(params[:doc])
end
def update
respond_with Doc.create(params[:id], params[:doc])
end
代码
部分模型代码的 url 设置为this.url = "docs/" + this.id
window.Doc = Backbone.Model.extend({
initialize : function Doc() {
this.url = "docs/" + this.id #not sure if this is correct
this.bind("error", function(model, error){
console.log( error );
});
},
url 设置为“docs”的集合
window.Docs = Backbone.Collection.extend({
model : Doc,
url: "docs",
initialize : function() {
console.log('Docs collection Constructor');
}
});
Rails 文档控制器
class DocsController < ApplicationController
respond_to :json
def index
respond_with Doc.all
end
def show
respond_with Doc.find(params[:id])
end
def create
respond_with Doc.create(params[:doc])
end
def update
respond_with Doc.create(params[:id], params[:doc])
end
def destroy
respond_with Doc
end
end
文档表
class CreateDocs < ActiveRecord::Migration
def change
create_table :docs do |t|
t.string :title
t.string :text
t.string :keywords
t.timestamps
end
end
end
创建了一些种子数据,但只设置了标题。Rails 自动设置 id,但我可以手动设置吗?
Doc.create!(title: "doc 1")
Doc.create!(title: "doc 2")