2017-05-25 63 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