je un contrôleur qui retourne XML pour une association has_many
la manière la plus évidente mais inefficace possible:XML Génération pour les associations ActiveRecord à l'aide batched trouver
@atoms = @molecule.atoms.find(:all, :include => :neutrons)
render :xml => @atoms.to_xml(:root => 'atoms')
Ce va chercher et instancie tous les objets à la fois. Pour rendre cette mémoire plus efficace, j'aimerais utiliser la recherche par lot d'ActiveRecord. À première vue, cela semble être la seule façon de le faire:
xml = '<atoms>'
@molecule.atoms.find_each(:include => :neutrons) do |atom|
xml << atom.to_xml
end
xml << '</atoms>'
render :xml => xml
Ceci est certainement plus efficace de la mémoire, mais est nettement moins élégante. Il duplique certaines des fonctionnalités existantes de Array#to_xml
.
Existe-t-il un moyen d'exploiter la puissance de find_each
sans développer XML à la main?
Ah, à droite. J'avais oublié à propos de ça. Mais je suppose que mon souci n'est pas de savoir où faire le bâtiment (pour lequel c'est certainement la meilleure approche) mais de faire le bâtiment du tout. Je préfère la nature autonome de pouvoir appeler '.to_xml' et il serait agréable de trouver un moyen d'échanger le' .each' qui est utilisé lors de la génération du XML d'une collection avec '.find_each'. – Ian