2009-12-21 8 views
0

Je cherche à créer une application Rails qui génère du XML au lieu du HTML. Comment puis-je faire cela?Ruby on Rails XML

Répondre

-1

Vous écrivez XML au lieu de HTML. Rails ne se soucie pas particulièrement de ce qu'elle sert.

5

Vous avez trois options.

L'option 1 consiste à rendre explicitement XML généré automatiquement.

render :xml => @object 

qui appellera @ object.to_xml pour vous. Vous pouvez ajuster la sortie avec les options:

render :xml => @object.to_xml(:except => [:private1, :private2], :include => [:associated_class]) 

Ceci est très rapide et facile. Cela fonctionnera plutôt bien si vous n'avez pas besoin d'un contrôle strict de la sortie. La représentation XML est contrôlée dans le contrôleur au lieu de la vue, ce qui est quelque peu désordonné, mais pas trop mauvais tant que vous ne vous amusez pas.

L'option 2 consiste à créer des modèles nommés .xml.erb au lieu du fichier .html.erb normal. Ce ne sont que des fichiers XML avec un balisage ERB normal. Si la requête contient une URL avec .xml à la fin, le comportement par défaut (en utilisant un échafaudage normal dans le contrôleur) est d'afficher ces modèles au lieu des HTML). ÉCHAFAUDAGES souvent un bloc comme:

respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @object.to_xml } 
end 

Dans ce cas (en supposant que vous voulez autoriser le HTML aussi bien) que vous voudriez enlever le bloc {} sur la ligne de format.xml il retombe à la valeur par défaut modèle.

L'option 3 est d'écrire votre propre objet -> mappage XML, en utilisant quelque chose comme Builder (qui est très très lisse et est inclus avec Rails). Soudain, votre modèle s'inquiète de ses points de vue. Je suggère de faire l'option 1 jusqu'à ce que vous commenciez à rencontrer des problèmes (parfois une modification apparemment bénigne changera la sortie XML - peut-être réorganiser les balises) et ensuite passer à l'option 2. Avoir ces fichiers XML là fait très très clair exactement ce qui est affiché, un peu comme avoir des fichiers de vue HTML. L'option 3 fonctionne, mais vous mélangez la logique (le reste de votre modèle) avec la présentation.