9
votes

Rails Rendu des données JSON avec racine de modèle

J'ai des données dans des rails que je veux rendre des données JSON. Ce que je fais en ce moment, c'est simplement trouver toutes les instances d'un modèle et d'appeler rendu: JSON => Data. XXX

Cependant, les rails incluent le nom du modèle de chaque objet JSON. Donc, mes données JSON finissent par ressembler à ceci: xxx

au lieu de ceci: [{PropertyName: 'valeur', ...}, {Nom de propriété: 'value2', ...}]

Le nom de modèle est toujours le même et je ne veux pas que ce soit là.

J'ai changé l'option pour rendre la racine dans les données JSON dans l'une des initialiseurs de rails, mais qui affecte tout ce que je veux rendu comme JSON, que je ne veux pas faire pour ce projet.

Dans ce cas, je veux pouvoir le faire au cas par cas.

Comment puis-je faire cela? Merci d'avance.


0 commentaires

3 Réponses :


2
votes

Je n'ai pas trouvé de moyen de le faire en passant des options à la méthode To_json (et je ne crois pas qu'il existe une telle option). Vous avez plus d'alternative à faire cela, toute classe qui hérite de Aciverecord :: Base aura incluse_root_in_json.

faire quelque chose comme ça. P>

data = Data.find(:all)
render :json => custom_json(data)


1 commentaires

Je viens d'essayer cela, et cela a pour effet de changer incluse_root_in_json sur false mondialement, malheureusement. Je cours des rails 2.3.5, si cela aide.



1
votes

Avec rails 3, j'ai trouvé cela mieux à faire. Remplacer le as_json code> dans votre modèle et faire comme suit:

def as_json(options = {})
    super(options.merge :methods => [:some_method_that_you_want_to_include_result], :include => {:child_relation => {:include => :grand_child_relation } })
end


0 commentaires

16
votes

avec des rails 3, vous pouvez utiliser active_model_serializers gem 1

qui vous permet de spécifier Rendu sans racine d'un objet comme celui-ci: xxx


1 commentaires

Cela a bien fonctionné pour moi, bien que cette période soit probablement une virgule?