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. Cependant, les rails incluent le nom du modèle de chaque objet JSON. Donc, mes données JSON finissent par ressembler à ceci: p> au lieu de ceci:
[{PropertyName: 'valeur', ...}, {Nom de propriété: 'value2', ...}] p> Le nom de modèle est toujours le même et je ne veux pas que ce soit là. P> 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. P> Dans ce cas, je veux pouvoir le faire au cas par cas. P> Comment puis-je faire cela? Merci d'avance. P> p>
3 Réponses :
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)
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.
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
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: p>
Cela a bien fonctionné pour moi, bien que cette période soit probablement une virgule?