Генерация XML для ассоциаций ActiveRecord с использованием пакетного поиска - PullRequest
1 голос
/ 22 декабря 2009

У меня есть контроллер, который возвращает XML для has_many ассоциации самым простым, но неэффективным способом:

@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.

Есть ли способ использовать всю мощь find_each, не создавая XML вручную?

1 Ответ

0 голосов
/ 23 декабря 2009

Мой обычный подход к генерации XML - использовать шаблон XML Builder.

#in the controller
respond_to do |format|
  format.html # index.html.erb
  format.xml # index.xml.builder
end

#in index.xml.builder
xml.atoms {
  @molecule.atoms.find_each(:include => :neutrons) do |atom|
     #etc
  end
}
...