2

我正在使用 Rails 3.1 和 Backbone.js 创建应用程序。使用从数据库中提取的模型集合(通过 Rails 控制器),我将数据库中的每个属性都获取到 javascript。但是使用相同的方法和代码对另一个模型做同样的事情,我没有得到第二个模型的数据库“id”。

这是有效的代码:

window.Post = Backbone.Model.extend
  urlRoot: '/posts'

  defaults:
    author_id: 2  

window.Posts = Backbone.Collection.extend
  model: Post
  url: '/posts'

控制器:

respond_to :html, :json, :js

def index
  @posts = current_user.posts
  respond_with(@posts.to_json(:include => {:account => {:only => :institution}}))
end

有了上面的这个,我得到了一个从数据库中提取的具有 id 属性的模型,但下面不包含 User 模型的 id 属性

这不是:

window.User = Backbone.Model.extend
  urlRoot: '/members'

window.Users = Backbone.Collection.extend
  model: User
  url: '/members'

控制器:

respond_to :html, :json, :js

def index
  @users = @account.users
  respond_with(@users)
end
4

2 回答 2

1

尝试在您的模型上设置 _id。看这里:

http://documentcloud.github.com/backbone/#Model-idAttribute

idAttribute model.idAttribute:模型的唯一标识符存储在 id 属性下。如果您直接与使用不同唯一键的后端(CouchDB、MongoDB)通信,您可以设置模型的 idAttribute 以透明地从该键映射到 id。

当您的模型从数据库返回到应用程序时,主干将看到该密钥并自动更新您的 model.id。因此,例如,我使用 mongodb 并且必须设置 model.idAttribute = "_id"。

于 2012-04-12T21:12:18.737 回答
0

感谢您的帮助,这就是问题所在。Rails 的 to_json 和/或 respond_with(@user) 正在删除 'id' 属性。我通过 [link]http://stackoverflow.com/questions/3719041/how-to-customize-to-json-response-in-rails-3[link] 找到了解决方案。

基本上我在我的模型中创建了一个方法'as_json',并确保它返回一个包含我的 id 的属性哈希。

于 2012-04-16T15:10:19.340 回答