【问题标题】:Rails 5.1 api render json doubling relationshipsRails 5.1 api渲染json加倍关系
【发布时间】: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


【解决方案1】:

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

  def get_codes_count
    self.codes.count
  end

然后,如果您想要计数,则可以这样做

  @user.as_json(method: :get_codes_count)

【讨论】:

  • 嗨@bhavesh-waghela 感谢您的想法,我想我已经找到了问题(请参阅上面的更新),但如果事情继续不正常,将调查此选项。
猜你喜欢
  • 2011-03-28
  • 2014-12-20
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多