2017-05-25 12 views
0

Rails 5.1.1では、JSONのレンダリングで何らかの関係が倍増するという問題があります。Rails 5.1 apiレンダリングjsonの倍増関係

has_many/belongs_to関係がありますが、気になることはありません。 「ユーザ」には多くの「コード」があります。

のparamsから来ているものを確認します:@user.update(user_params)が呼び出された後に保存されているもの

(byebug) user_params['codes_attributes'].count 
2 

チェック:

(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 
から出力されたものを10

チェック(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

私は元気だったと思いますが、残念ながら私はそうではありません。 'accepts_nested_attributes_for'の一環として' User#autosave_associated_records_for_codes'にカスタムコードをいくつか持っています...どうか関係があるかどうか調べようとしています。 – krsyoung

+0

あなたは 'as_json'の出力を表示していません – Bartosz

答えて

0

私はレールで多くの経験がありませんが、これを試してみることをお勧めします。私はそれについてはわからないが、試してみるべきだ。

def get_codes_count 
    self.codes.count 
    end 

そして、あなたは、カウントをしたい場合は、その後、あなたはちょうど

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

こんにちは@ bhavesh-waghelaのアイデアをありがとう、私は問題を発見したと思う(上のUPDATEを参照)。 – krsyoung

関連する問題