0

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

4

1 回答 1

0

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

  def get_codes_count
    self.codes.count
  end

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

  @user.as_json(method: :get_codes_count)
于 2017-05-26T07:59:31.830 回答