Rails 5.1 api渲染json加倍的关系

时间:2017-05-25 22:15:56

标签: ruby-on-rails json ruby-on-rails-5 ruby-on-rails-5.1

使用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)。我现在已经对它进行了评论,但是会尝试重新审视为什么它会加倍。一旦我弄明白确切的原因将回复一个解决方案。

1 个答案:

答案 0 :(得分:0)

我对rails没有太多经验,但我建议你试试这个。我不确定,但你应该试一试。

  def get_codes_count
    self.codes.count
  end

然后,如果你想要一个计数,那么你就可以做到

  @user.as_json(method: :get_codes_count)