使用Rails 5.1.1我有一个问题,即以某种方式渲染JSON"加倍"关系的数量。
有一个has_many / belongs_to关系,没什么特别的。 A"用户"有很多"代码"。单步执行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)。我现在已经对它进行了评论,但是会尝试重新审视为什么它会加倍。一旦我弄明白确切的原因将回复一个解决方案。
答案 0 :(得分:0)
我对rails没有太多经验,但我建议你试试这个。我不确定,但你应该试一试。
def get_codes_count
self.codes.count
end
然后,如果你想要一个计数,那么你就可以做到
@user.as_json(method: :get_codes_count)