Ember-data and MongoDB, how to handle _id

后端 未结 9 818
别跟我提以往
别跟我提以往 2021-02-08 17:20

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 f

相关标签:
9条回答
  • 2021-02-08 17:53

    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

    0 讨论(0)
  • 2021-02-08 17:57

    The best way is to use ActiveModel::Serializers. Since we are using Mongoid, you will need to add an include statement like that (see this gist from benedikt):

    # config/initializers/active_model_serializers.rb
    Mongoid::Document.send(:include, ActiveModel::SerializerSupport)
    Mongoid::Criteria.delegate(:active_model_serializer, :to => :to_a)
    

    And then include your serializer. Something like that:

    # app/serializers/user_serializer.rb
    class UserSerializer < ActiveModel::Serializer
      attributes :id, :name, :email
      def id
        object._id
      end 
    end
    

    This fixes the _id problem

    0 讨论(0)
  • 2021-02-08 17:58

    An other way could be to use (if possible for you) the ActiveModel::Serializer. (I think it should be close to rabl (?))

    From the ember-data gihtub: https://github.com/emberjs/data:
    Out of the box support for Rails apps that follow the active_model_serializers gem's conventions

    When we began with ember-data we were crafting as_json(), but using the gem is definitely better :)

    0 讨论(0)
提交回复
热议问题