【发布时间】:2012-02-01 16:39:46
【问题描述】:
我正在尝试让我的骨干关联在 rails 应用程序中工作,但在尝试更新现有模型时遇到了困难。具体来说,Rails 会抛出以下错误:
在 2012-01-04 02:36:14 +1000 开始为 127.0.0.1 放置“/posts/2”
PostsController#update 处理为 JSON 参数: {"post"=>{"content"=>"Seconderona", "created_at"=>"2012-01-03T10:51:09Z", "id"=>2, "title"=>"第二次测试 post", "updated_at"=>"2012-01-03T10:51:09Z", "cmets"=>[{}]}, "id"=>"2"} Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE “帖子”。“id”=? LIMIT 1 [["id", "2"]] 警告:不能批量分配 受保护的属性:id Completed 500 Internal Server Error in 15msActiveRecord::AssociationTypeMismatch (评论(#70104367824560) 预期,得到 ActiveSupport::HashWithIndifferentAccess(#70104367278120)):
app/controllers/posts_controller.rb:62:inblock in update'update'
app/controllers/posts_controller.rb:61:in
一些事情:
这是触发的(例如):
c = window.router.comments.models[0]
c.save({content: 'Changed content'})
另外,是的,模型中存在“accepts_nested_attributes_for”。
下面的(有问题的)代码几乎一字不差地取自 thougtbot 的“backbone on rails”电子书,我还尝试遵循骨干关系 gem 的文档。两者都会引发此错误。任何想法表示赞赏,下面的代码
RAILS 'POST' 模型
class Post < ActiveRecord::Base
has_many :comments
accepts_nested_attributes_for :comments
def as_json(options = nil)
super((options || {}).merge(include: { comments: { only: [content] } } ))
end
end
铁路“评论”模型
class Comment < ActiveRecord::Base
belongs_to :post
accepts_nested_attributes_for :post
def as_json(options = nil)
super((options || {}).merge(include: { post: { only: [:title, :content]}}))
end
end
骨干后控制器
class Backbonerelationaldemo.Models.Post extends Backbone.Model
paramRoot: 'post'
initialize: () ->
comments = new Backbonerelationaldemo.Collections.CommentsCollection
comments.reset(@get('comments'))
@setComments(comments)
setComments: (comments) ->
@comments = comments
class Backbonerelationaldemo.Collections.PostsCollection extends Backbone.Collection
model: Backbonerelationaldemo.Models.Post
url: '/posts'
主干评论控制器
class Backbonerelationaldemo.Models.Comment extends Backbone.Model
paramRoot: 'comment'
initialize: () ->
if (@has('post'))
@setPost(new Backbonerelationaldemo.Models.Post(@get('post')))
setPost: (post) ->
@post = post
class Backbonerelationaldemo.Collections.CommentsCollection extends Backbone.Collection
model: Backbonerelationaldemo.Models.Comment
url: '/comments'
【问题讨论】:
标签: javascript ruby-on-rails json backbone.js coffeescript