如何将 Sequel 结果序列化为 JSON

Mac*_*ber 2 ruby json sequel

这是我的模型

class Client < Sequel::Model(:clients)
end
Run Code Online (Sandbox Code Playgroud)

当我执行

Client.first.to_json
Run Code Online (Sandbox Code Playgroud)

我得到

"\"#<Client:0x2594b824>\""
Run Code Online (Sandbox Code Playgroud)

但是当我执行

DB[:clients].first.to_json
Run Code Online (Sandbox Code Playgroud)

我正确地得到:

{id: 1, name: "Someone" ... }
Run Code Online (Sandbox Code Playgroud)

我做错了什么?...我也尝试使用Client.dataset.first.json具有相同的结果。

此外,我正在使用 MS Access DB,但我认为这并不重要。

Kri*_*ris 5

json库(Ruby的标准库的一部分),和其他宝石如的ActiveSupport,与猴子补丁的对象to_json可能是怎样获取调用,而不是一个具体方法to_json由续集提供的方法,知道如何将转换Sequel::Model实例JSON。这是猜测我会感到惊讶的是,JSON库猴子补丁比其他任何东西StringArrayHash等。

使用时,DB[:clients].first您可能会返回Hash具有to_json方法的a ,其中 asClient.first返回一个模型实例,该实例不由to_jsonjson 库提供的泛型方法处理。

尝试注册 Sequel JSON 插件,这应该优先于猴子补丁to_json方法:

Sequel::Model.plugin :json_serializer
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这是一个很好的指标,说明为什么猴子修补通常是一个坏主意,尤其是对库/宝石命名空间之外的类进行猴子修补。