【发布时间】:2017-05-25 22:15:56
【问题描述】:
在 Rails 5.1.1 中,我遇到了一个问题,即呈现 JSON 会以某种方式“加倍”关系数量。
有一个 has_many / belongs_to 关系,没什么特别的。一个“用户”有很多“代码”。单步执行users_controller#update 方法,我看到以下内容:
检查来自参数的内容:
(byebug) user_params['codes_attributes'].count
2
检查调用@user.update(user_params) 后保存的内容:
(byebug) @user.codes.count
(0.4ms) SELECT COUNT(*) FROM "codes" WHERE "codes"."user_id" = ? [["user_id", 85]]
2
最后,直系as_json 也通过关系加倍:
(byebug) @user.codes.as_json.count
4
检查as_json 的输出(to_json 相同):
(byebug) @user.as_json(include: [:friend, :codes])['codes'].count
4
(byebug) @user.codes.count
(0.3ms) SELECT COUNT(*) FROM "codes" WHERE "codes"."user_id" = ? [["user_id", 85]]
2
在这里我们可以看到,不知何故,关系的数量神奇地翻了一番!有什么想法吗?
更新
我正在使用自定义函数来保存关联 (autosave_associated_records_for_codes),这似乎引发了问题。我现在已经评论了它,但会尝试重新审视为什么它会加倍。一旦我找出确切的原因,就会回复一个解决方案。
【问题讨论】:
-
你不是在
Code模型的as_json方法中做一些奇怪的事情吗? -
我希望我是......但不幸的是我不是。我在
User#autosave_associated_records_for_codes中有一些自定义代码作为accepts_nested_attributes_for的一部分...试图弄清楚这是否有某种相关性。 -
你没有显示
as_json输出
标签: ruby-on-rails json ruby-on-rails-5 ruby-on-rails-5.1