2010-01-14 11 views
3

Je suis en train de créer un outil qui génère du XML dynamique. Par conséquent mes modèles ont assez des noms génériques:Personnaliser les noms de nœuds dans Ruby's Builder

Project 
    has_many :Groups 

Group 
    has_many :Items 
    has_many :Groups 
    belongs_to :Project 

Item 
    has_many :Params 
    belongs_to :Group 

Param 
    belongs_to :Project 
    belongs_to :Group 
    belongs_to :Item 

Alors, quand je construis le xml du contrôleur de projet, le nom du nœud du projet est le nœud racine du xml. Mais je ne veux pas qu'on l'appelle "projet". Je veux que le noeud soit quelque soit la valeur de @ project.params ['name'].

Le problème que je vais avoir est que la structure du constructeur rend ce difficile ... Quand je fais:

xml.project do 
    ~some code 
end 

... Il va toujours de créer « projet » comme le nom du nœud racine . Je ne peux pas trouver un moyen de le remplacer pour utiliser un nom différent. J'espérais quelque chose comme ce qui suit fonctionnerait:

xml.send(@project.params.name) { 
    ...some code 
} 

..mais cela ne fonctionne évidemment pas. J'essaie donc essentiellement de trouver un moyen d'aliaser les noms d'éléments qui sont configurés dans mon modèle params. Toutes les suggestions seraient grandement appréciées.

Répondre

6

Au lieu de faire xml.project, essayez:

xml.tag! @project.params.name do 

Cela devrait également être utilisé s'il y a un trait d'union dans le nom de l'élément.

+0

Je viens de comprendre cela aussi. Merci pour la réponse! –