Ember-data and MongoDB, how to handle _id

ember-data, ember.js, mongodb, mongoid, ruby-on-rails

Solution

If you are using Mongoid here is a solution that makes it so you don't have to add a method `def id; object._id.to_s; end` to every serializer

Add the following Rails initializer

Mongoid 3.x

module Moped
  module BSON
    class ObjectId
      alias :to_json :to_s
      alias :as_json :to_s
    end
  end
end

Mongoid 4

module BSON
  class ObjectId
    alias :to_json :to_s
    alias :as_json :to_s
  end
end

Active Model Serializer for `Building`

class BuildingSerializer < ActiveModel::Serializer
  attributes :id, :name
end

Resulting JSON

{
  "buildings": [
    {"id":"5338f70741727450f8000000","name":"City Hall"},    
    {"id":"5338f70741727450f8010000","name":"Firestation"}
  ]
}

This is a monkey patch suggested by brentkirby and updated for Mongoid 4 by arthurnn

Problem

I'm using ember-data with rails and MongoDB and am having problem with the way IDs are stored in MongoDB - in a _id field. Ember-data will use id as the default field for ID so I tried to override it like this: ``` App.User = DS.Model.extend primaryKey: "_id" name: DS.attr "string" image: DS.attr "string" ``` This seems to work most of the time but in some instances I get exceptions from ember saying: Uncaught Error: assertion failed: Your server returned a hash with the key _id but you have no mappings I suspect this might be a bug in ember-data because it's still heavily under development, but I was trying to find a way to get to map _id to id on the server side in rails? I'm using mongoid to do the mongo mapping.

Original source

Related problems