9

私のルビーモデルは次のようになります:

class User
  include Mongoid::Document
  field :first_name, type: String
  field :birthdate, type: Date

  validates :first_name, :birthdate, :presence => true

end

次のようなオブジェクトを出力します。

{
_id: {
$oid: "522884c6c4b4ae5c76000001"
},
birthdate: null,
first_name: null,
}

私のバックボーン プロジェクトには、_id.$oid の処理方法がわかりません。

この記事とコードを見つけました:

https://github.com/rails-api/active_model_serializers/pull/355/files

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

これをどこに置くか、モデル出力で呼び出す方法がわからないので、内部で試しました:

/config/initializers/secret_token.rb

私はRubyとRailsに不慣れで、どのように進めればよいのかわからないので、どんな助けも大歓迎です

4

5 に答える 5

33

カークの答えを繰り返す:

Mongoid 4 では、Moped の BSON 実装が削除され、MongoDB bson gem が使用されるようになったため、Mongoid 4 ユーザー向けの正しいバージョンは次のとおりです。

module BSON
  class ObjectId
    def to_json(*args)
      to_s.to_json
    end

    def as_json(*args)
      to_s.as_json
    end
  end
end
于 2013-12-28T09:46:20.123 に答える
4

Mongoid 4+ を使用している人は、これを使用してください。

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

参照

于 2015-04-07T13:11:46.800 に答える
3

Aurthur の答えは、rabl 以外のすべてで機能しました。rabl を使用している場合、属性 :id は例外をスローします。次のコードは rabl と互換性があります。

module Moped
  module BSON
    class ObjectId
      def to_json(*args)
        to_s.to_json
      end

      def as_json(*args)
        to_s.as_json
      end
    end
  end
end

詳細については、github の問題https://github.com/nesquena/rabl/issues/337を参照してください。

于 2013-10-02T23:03:30.763 に答える
0

これがより良い答えです

require "bson"

class Jbuilder < JbuilderProxy

  def _extract_method_values(object, *attributes)
    attributes.each do |key|
      value = object.public_send(key)

      if value.is_a? ::BSON::ObjectId
        value = value.to_s
      end

      _set_value key, value
    end
  end
end
于 2014-05-25T13:04:51.020 に答える