2017-05-25 62 views
0

使用Rails 5.1.1我有一个问题,在渲染JSON时会以某种方式“关注”关系数量。Rails 5.1 api渲染JSON倍增关系

有一个has_many/belongs_to关系,没什么奇特的。一个“用户”有很多“代码”。

检查取之于PARAMS未来:

(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 

最后一个直通users_controller#update方法我看到下面的步进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 

在这里,我们可以看到,在某种程度上关系的数量增加了一倍神奇!有任何想法吗?

UPDATE

我正在使用的自定义功能,以节省协会(autosave_associated_records_for_codes),这似乎已经引入了问题。我现在已经发表了评论,但会试图重新审视为什么它将事情翻倍。一旦我找出确切的原因将回答一个解决方案。

+0

是不是你做的事情在你的'Code'模型的'as_json'方法不可思议? – fanta

+0

我希望我是...但不幸的是我不是。我在'用户#autosave_associated_records_for_codes'中有一些自定义代码作为'accepting_nested_attributes_for'的一部分...试图弄清楚这是否有某种相关性。 – krsyoung

+0

您没有显示'as_json'输出 – Bartosz

回答

0

我对轨道没有太多的经验,但我建议你试试这个。 Iam不确定,但你应该试试看。

def get_codes_count 
    self.codes.count 
    end 

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

@user.as_json(method: :get_codes_count) 
+0

Hi @ bhavesh-waghela感谢您的想法,我想我已经发现了这个问题(请参阅上面的UPDATE),但如果事情继续发生错误,将调查此选项。 – krsyoung