2009-12-22 4 views
1

I 가능한 가장 솔직하지만 비효율적 인 방법으로 has_many 협회에 대한 XML을 반환하는 컨트롤러가 :생성 된 XML

@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의 힘을 활용할 수있는 방법이 있습니까?

답변

0

XML을 생성하는 일반적인 방법은 XML 작성기 템플릿을 사용하는 것입니다.

#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 
} 
+0

아, 맞아. 나는 이것을 잊어 버렸다. 그러나 내 관심사는 건물을 어디에서 할 것인가 (이것이 가장 좋은 접근법 임)가 아니라 건물을 전혀 할 것인가하는 것입니다. 필자는'.to_xml'을 호출 할 수있는 자체 내장 된 특성을 선호하며'.find_each'를 사용하여 콜렉션의 XML을 생성 할 때 사용되는'.each'를 교체하는 방법을 찾는 것이 좋습니다. – Ian