1

次のような位置情報クエリによって返される Mongo オブジェクトの配列があります。

@data = Record.geo_near([lng,lat], :max_distance => dist, :unit => :m, :spherical => true)

次に、予想される形式に基づいて応答をシリアル化しようとしています:

respond_to do |format|
    format.html 
    format.json { render json: @data, :status => 200 } # Not working
    format.xml { render xml: @data, :status => 200 } # Working !
end

奇妙なことに、XML ではすべてがスムーズに進みますが、JSON では次のエラーが発生します。

ActiveSupport::JSON::Encoding::CircularReferenceError in BouncesController#populars
object references itself

同じ種類のエラーに関連するこの投稿を見つけましたが、検証済みの回答はうまくいきませんでした。

何か案は?

編集

問題が発生している私のモデルは次のとおりです。

class MyModel
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document

  spacial_index :loc, :min => -180, :max => 180
  belongs_to :user

  field :text, :type => String
  field :loc, :type => Array, spacial: true
  field :accuracy, :type => Float

  def as_json(options={})
  {
  "id" => self.id,
  "text" => self.text,
  "loc" => self.loc,
  "accuracy" => self.accuracy,
  "user" => {
    "id" => self.user['_id'],
    "login" => self.user['login'],
    "role" => self.user['role']
  },
  "created_at" => self.created_at,
  "updated_at" => self.updated_at
  }
  end
end
4

1 に答える 1

0

今のところ、次のように宝石をダウングレードすることで問題を解決しました。

gem 'mongo', '1.4.0'
gem "mongoid", "~> 2.4"
gem "bson_ext", "~> 1.5"

次のハックを使用する可能性はまだありますが、モデルで json 出力を自分でフォーマットできなくなります。

format.json { render json: Hash.from_xml(@data.to_xml).to_json, :status => 200 }
于 2012-08-14T12:26:35.623 に答える