在 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),这似乎引入了问题。我现在已经评论了它,但会尝试重新审视为什么它会加倍。一旦我找出确切的原因,就会回复一个解决方案。