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.