数据库ID未在Rails和Backbone.js之间传递

时间:2012-04-12 18:08:28

标签: mysql ruby-on-rails-3 json backbone.js

我正在使用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

2 个答案:

答案 0 :(得分:1)

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

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

  

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

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

答案 1 :(得分: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的属性哈希。