Ember-data和MongoDB,如何处理_id

Cha*_*lie 9 ruby-on-rails mongodb mongoid ember.js ember-data

我正在使用带有rails和MongoDB的ember-data,并且对于在MongoDB中存储ID的方式存在问题 - 在_id字段中.

Ember-data将使用id作为ID的默认字段,所以我试图像这样覆盖它:

App.User = DS.Model.extend
    primaryKey: "_id"
    name: DS.attr "string"
    image: DS.attr "string"
Run Code Online (Sandbox Code Playgroud)

这似乎在大部分时间都有效,但在某些情况下,我从ember说得到例外:

未捕获错误:断言失败:您的服务器返回带有密钥_id的哈希,但您没有映射

我怀疑这可能是ember-data中的一个错误,因为它仍处于开发阶段,但是我试图找到一种方法来将_id映射到服务器端的id中?我正在使用mongoid来进行mongo映射.

bar*_*eus 8

如果您正在使用Mongoid,那么这是一个解决方案,因此您无需def id; object._id.to_s; end为每个序列化程序添加方法

添加以下Rails初始化程序

Mongoid 3.x

module Moped
  module BSON
    class ObjectId
      alias :to_json :to_s
      alias :as_json :to_s
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Mongoid 4

module BSON
  class ObjectId
    alias :to_json :to_s
    alias :as_json :to_s
  end
end
Run Code Online (Sandbox Code Playgroud)

用于的活动模型序列化器 Building

class BuildingSerializer < ActiveModel::Serializer
  attributes :id, :name
end
Run Code Online (Sandbox Code Playgroud)

结果JSON

{
  "buildings": [
    {"id":"5338f70741727450f8000000","name":"City Hall"},    
    {"id":"5338f70741727450f8010000","name":"Firestation"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是一个猴子通过补丁建议brentkirby和更新的Mongoid 4 arthurnn


Jes*_*ott 1

啊,您可以制作 JSON 来使用 id 方法而不是 _id 属性,而不是在 JSON 中包含 _id 。方法:

您可以使用rabl,JSON 可能如下所示:

object @user 
attributes :id, :email
node(:full_name) {|user| "#{user.first_name} #{user.last_name}"}
Run Code Online (Sandbox Code Playgroud)

您还可以制作 as_json 方法

class User
  def as_json(args={})
    super args.merge(:only => [:email], :methods => [:id, :full_name])
  end
end
Run Code Online (Sandbox Code Playgroud)