2009-07-25 3 views
3

Ich habe eine Ruby on Rails-Anwendung, die zwei Modelle hat - ltests und sub_tests. Ein ltest hat eine 'has_many' Assoziation mit sub_tests. In der Show-Methode für ltests ist wie folgt.Ruby on Rails - wie man als xml-Modelle mit has_many-Zuordnungen rendert

respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @ltest } 
end 

Dies macht das ltest-Objekt. Die zum Test gehörenden Untertests werden jedoch nicht gerendert.

Wie kann ich das tun?

<ltest> 
.... 
    <sub_test> 
    ... 
    </sub_test> 
    <sub_test> 
    ... 
    </sub_test> 
</ltest> 

Ich versuchte es mit einem Blick wie diese machen:

Aber das erzeugt zwei XML-Dokumente anstatt eines mit sub_tests in ltests eingebettet.

Irgendwelche Vorschläge, wie ich das machen kann?

Antwort

1

Dies tun in der Ansicht show.xml.erb tat den Trick.

<%= @ltest.to_xml :include => [ :sub_tests ]%> 

Die Objekte, die in Sub_tests (test_logs, errors) verschachtelt sind, werden jedoch weggelassen.

5

Scheint, Schienen können mehrere Ebenen der Verschachtelung behandeln. Dies ist der Code, mit dem ich endete.

<%= @ltest.to_xml(:include => { 
     :test_group => { :include => [ :user ]}, 
     :sub_tests => { :include => { 
      :attachments => {}, 
      :errors => {}, 
      :test_bugs => {}, 
     } }, 
     :attachments => {}, 
     :errors => {}, 
     :test_bugs => {}, 
     :test_nodes => { :include => { 
      :node => { :include => [ :networks ]}, 
      :attachments => {}, 
     }} 
    }) %> 
13

Sie müssen nicht Builder oder Erb dafür verwenden. Sie können bekommen, was Sie in der Steuerung wollen (zumindest ich in Schienen können 2.3.4) wie folgt aus:

format.xml { render :xml => @ltest.to_xml(:include => :sub_tests) } 
+0

Dank ... hat mir geholfen Tonnen ! –

3

tief verschachtelten Objekten zu machen:

render :xml => @record.to_xml(:include => {:groups => {:include => {:questions => {:include => :items}}}})