2017-10-16 7 views
0

Comment chaîner plusieurs modèles à afficher en tant qu'objet JSON dans des rails? Actuellement, je ont un rendu déclaration commeEnchaînement de modèles lors du rendu de JSON dans les rails

render json: current_user.role.selected_bids.to_json(include: [:project => {include: [:milestones , :skill_category] } ]) 

Je veux ajouter à cet objet JSON un autre modèle où je reçois d'inclure un modèle associé à: étapes. Quelque chose comme ceci

render json: current_user.role.selected_bids.to_json 
(include: [:project => {include: [:milestones=> {include: [:timetrackers]}, 
:skill_category]}]) 

mais son lancer une erreur de syntaxe. Est-il possible de faire ce niveau d'imbrication ou devrais-je faire un autre appel d'API?

+0

Vous pouvez utiliser un sérialiseur pour structurer la solution json ou une vue basée sur des vues telle que jbuilder. – Anton

+0

Oh d'accord, mais n'est-il pas possible d'inclure une association ici même? – BigDaddy

+0

https://apidock.com/rails/ActiveRecord/Serialization/to_json Regardez le dernier bloc. "Les associations de 2ème niveau et de niveau supérieur fonctionnent aussi" – Anton

Répondre

1

La raison pour laquelle vous obtenez une erreur de syntaxe est que vous essayez de créer une Hash en utilisant la syntaxe que vous utiliseriez pour créer un Array. Vous pouvez à la place faire ceci:

render json: current_user.role.selected_bids.to_json(
    include: [ 
    project: { 
     include: [ 
     { 
      milestones: { 
      include: [:timetrackers] 
      }, 
     }, 
     :skill_category 
     ] 
    } 
    ] 
) 
+0

Remarquez comment j'ai enveloppé la clé 'milestones' à l'intérieur des accolades pour indiquer qu'il s'agit d'un' Hash'. – bitsapien