RailsプロジェクトでDataMapperを使用していて、モデルインスタンスまたはコレクションのいずれかでto_json
を呼び出すと、JSONの循環参照エラーまたはと同じクエリの無限級数という異常な動作が発生することが判明しました。DataMapperのオブジェクトやコレクションで `to_json`が無限のクエリを引き起こすのはなぜですか?
が、これは私のモデル定義に問題だったと仮定すると、私はRailsのコンソールを開き、最も単純なモデル作成:
f = Foo.first
f.to_json
:このモデルのインスタンスを保存した後
class Foo
include DataMapper::Resource
property :id, Serial
property :name, String
end
Foo.auto_migrate! # create db table `foos` for this model
を、私はこれをしませんでした
この時点で、プロセスはハングアップするようです。 I tail -f log/development.log
場合、私はこのクエリを何度も実行を参照してください。
SQL (0.084ms) SELECT `id`, `name` FROM `foos` ORDER BY `id`
Rubyのメモリ使用量は、私がコマンドを中断またはRubyのプロセスを強制終了するまで成長を続けています。これは私の実際のモデルで持っていたのと同じ問題なので、モデルの定義が間違っているとは思われません。
この奇妙な動作は何が原因ですか?
なぜこのようなことが起こるのか分かりませんが、dm-serializerのgemは 'to_json'という動作をしてくれます:https://github.com/datamapper/dm-serializer。私は少なくともこの問題を他の人がこの情報を見つけるためにウェブに載せたいと思っていました。 –