gpt4 book ai didi

ruby-on-rails - ActiveRecord 对象 ruby​​ 3.0 上的 to_json

转载 作者:行者123 更新时间:2023-12-03 16:46:33 24 4
gpt4 key购买 nike

我正在使用 rails 6.0.3.6 和 ruby​​ 3.0.0,
当我打电话时{'user' : User.first }.to_json我收到 "{\"user\":\"#<User:0x00007fa0a8dae3c8>\"}"[User.first, User.last].to_json 相同
如果我切换回 ruby​​ 2.7.2,
我得到了正确的结果,即 <User:0x00007fa0a8dae3c8>替换为它的所有属性。
知道我缺少什么吗?

最佳答案

问题出在 Rails 6.0.3.6 中调用 to_json 时在 {'user' : User.first } Rails 最终添加了一个 JSON::Ext::Generator::State to_json 的论据, 所以 options.is_a?(::JSON::State)返回 true 和 super(options)被退回。
来自 to_json 的定义:

def to_json(options = nil)
if options.is_a?(::JSON::State)
# Called from JSON.{generate,dump}, forward it to JSON gem's to_json
super(options)
else
# to_json is being invoked directly, use ActiveSupport's encoder
ActiveSupport::JSON.encode(self, options)
end
end
而在最近的 Rails 中 to_json不带任何参数调用,分支采用路径最终返回 ActiveSupport::JSON.encode(self, options) .
所以,在你的情况下,你可以做
{ 'user': User.first.attributes }.to_json
绕过问题。

关于ruby-on-rails - ActiveRecord 对象 ruby​​ 3.0 上的 to_json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66871265/

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