2015-11-27 2 views
1

Dans la méthode show pour un contrôleur i ont la configuration @object avec requêteInsertion clé personnalisée: paire de valeurs dans la structure JSON avec un ordre personnalisé à l'aide JBuilder

@object = WorkOrder.find(params[:id]) 

Maintenant, le modèle de show.json.jbuilder a code comme:

json.extract! @object, :id, :note, :status, :created_at 
json.store_name @object.store.display_name 

et o/p est

{ 
    "id": 31, 
    "note": "work_order for store A", 
    "status": "complete", 
    "created_at": "2015-11-26T11:16:53.000Z", 
    "store_name": "store name" 
} 

maintenant, comment insérer 'store_name' clé personnalisée entre le 'statut' et 'created_at'?

+0

essayer comme ça => json.extract! objet,: id,: note,: statut, json.store_name objet.store.display_name json.extract! objet,: created_at –

+1

Si je peux demander, pourquoi avez-vous besoin d'une commande dans le json? –

+0

@ bo-oz Bien que l'ordre n'a pas d'importance, mais était désireux de connaître la façon de résoudre le problème. – codemilan

Répondre

2

Si vous voulez les attributs dans un ordre spécifique que ce serait probablement mieux si vous les ajoutez vous-même.

fichier Jbuilder:

json.id @object.id 
json.note @object.note 
json.status @object.status 
json.display_name @object.store.display_name 
json.created_at @object.created_at 

Sortie

{ 
    "id": 31, 
    "note": "work_order for store A", 
    "status": "complete", 
    "display_name": "store name", 
    "created_at": "2015-11-26T11:16:53.000Z" 
} 

Je vous recommande d'intégrer les relations. Il est préférable de l'adapter si vous souhaitez ajouter d'autres attributs du Store.

Exemple:

fichier Jbuilder:

json.id @object.id 
json.note @object.note 
json.status @object.status 

json.store do 
    json.name @object.store.display_name 
end 

json.created_at @object.created_at 

Sortie

{ 
    "id": 31, 
    "note": "work_order for store A", 
    "status": "complete", 
    "store": { 
    "name": "store name" 
    }, 
    "created_at": "2015-11-26T11:16:53.000Z" 
} 

Plus tard, vous pouvez facilement ajouter des attributs au hachage Store sans casser l'interface.

-2

Je crains qu'il n'ait aucun moyen d'amener store_name à une autre position. Vous devriez être heureux avec les choses que vous avez.

1

Vous pouvez également laisser Rails faire la magie comme ceci:

render :json => @object, :include => {:store => {:only => :display_name}} 
+0

désolé, cela ne résout pas le problème de commande ... –