1
我有一個控制器,它能夠以最直接的,但低效的方式返回XML的has_many
協會:生成XML使用批處理找到ActiveRecord關聯
@atoms = @molecule.atoms.find(:all, :include => :neutrons)
render :xml => @atoms.to_xml(:root => 'atoms')
這將提取和一次實例化的所有對象。爲了提高內存的使用效率,我想使用ActiveRecord的批量查找。乍一看,這似乎是做到這一點的唯一方法:
xml = '<atoms>'
@molecule.atoms.find_each(:include => :neutrons) do |atom|
xml << atom.to_xml
end
xml << '</atoms>'
render :xml => xml
這肯定是更多的內存效率,但斷然那麼優雅。它複製了Array#to_xml
的一些現有功能。
有沒有辦法在沒有手動構建XML的情況下利用find_each
的威力?
啊,對。我已經忘記了這一點。但我想我的擔心不在哪裏做建築(對此,這絕對是最好的方法),而是根本不管建築。我更喜歡能夠調用'.to_xml'的自包含特性,並且找到一種方法來交換在使用'.find_each'生成集合的XML時使用的'.each'。 – Ian 2009-12-24 17:20:07