2010-04-23 31 views
3

好吧,我知道你可以重寫to_xml方法來獲取單個ActiveRecord對象的實例,它對我來說工作得很好。但是,我將如何去覆蓋to_xml方法來收集對象?爲集合ActiveRecord對象重寫to_xml

假設對於任務模型實例,我實現了to_xml,它看起來像這樣。

def to_xml 
    super(:methods => [:tag_list], :include => {:project => {:include => {:folder => {}}}, :folder => {}}) 
end 

將單個任務序列化爲xml時工作得很好。但是,當我的代碼在下面的代碼段用於任務的收集運行時,像

render :xml => @tasks.to_xml 

我得到

wrong number of arguments (1 for 0) 

/home/chirantan/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/conversions.rb:189:in `to_xml' 
/home/chirantan/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/conversions.rb:189:in `to_xml' 
/home/chirantan/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/conversions.rb:189:in `each' 
/home/chirantan/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/conversions.rb:189:in `to_xml' 
/var/lib/gems/1.8/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call' 
/var/lib/gems/1.8/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures' 
/var/lib/gems/1.8/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing' 
/var/lib/gems/1.8/gems/builder-2.1.2/lib/builder/xmlbase.rb:31:in `tag!' 
/~/blah/app/controllers/tasks_controller.rb:412:in `completed' 

如何使這項工作?

render :xml => @tasks 

是否render方法不能自動拿起你的精雕細琢to_xml:

回答

3

你to_xml覆蓋應被宣佈

def to_xml options={} 
    .... 
end 
0

如果你只是使用,會發生什麼?

+0

哎呀。我知道這一點,這將無法正常工作:)這是一種解決方法。我希望將對象集合視爲要序列化的對象。如果你看一下'render:xml => @ tasks'的樣子並將其與你的解決方案進行比較,你就會知道。 – Chirantan 2010-04-23 15:48:47