gpt4 book ai didi

ruby - 为什么 DataMapper 对象和集合上的 `to_json` 会导致无限查询?

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:28 26 4
gpt4 key购买 nike

我在 Rails 项目中使用 DataMapper,发现在模型实例或集合上调用 to_json 会导致奇怪的行为:来自 JSON 的循环引用错误,或 无限系列的相同查询

假设这是我的模型定义的问题,我打开了一个 Rails 控制台并创建了尽可能简单的模型:

class Foo
include DataMapper::Resource
property :id, Serial
property :name, String
end

Foo.auto_migrate! # create db table `foos` for this model

保存这个模型的实例后,我这样做了:

f = Foo.first
f.to_json

此时,进程似乎挂起。如果我 tail -f log/development.log,我会看到这个查询一遍又一遍地执行:

SQL (0.084ms)  SELECT `id`, `name` FROM `foos` ORDER BY `id`

Ruby 的内存使用量持续增长,直到我中断命令或终止 Ruby 进程。这与我在实际模型中遇到的问题相同,因此我认为这与错误的模型定义无关。

是什么导致了这种奇怪的行为?

最佳答案

似乎由 ActiveSupport 实现的 Object#to_json 方法序列化了对象的所有属性。 Datamapper 维护一个自引用变量 (@_repository),该变量将方法发送到递归困惑中。

好消息是 dm-serializer gem(正如您提到的)提供了必要的功能,并且 Rails 已经说明了如何 fix the problem in the dm-rails project (只是还没有发生)。

关于ruby - 为什么 DataMapper 对象和集合上的 `to_json` 会导致无限查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9906954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com