to_xml with:only和:方法

时间:2011-02-22 21:37:33

标签: ruby-on-rails ruby xml

我使用:only和:methods参数调用ActiveRecord对象上的to_xml。

我包含的方法返回AR对象的集合。这样做没有:只有param,但是当添加它时我只得到我的对象的默认to_s表示。

<author><books>#&lt;Book:0x107753228&gt;</books>\n</author>

有什么想法吗?

更新,这是代码:

class Author < ActiveRecord::Base
  def books
    #this is a named scope
    products.by_type(:book)
  end
end

Author.to_xml(:methods => :books, :only => :id)

2 个答案:

答案 0 :(得分:2)

AFAIK,您必须手动处理子对象:

a = Author.find_by_whatever
xml_string = a.to_xml(:only => :id) { |xml|
     a.books.to_xml(:builder => xml, :skip_instruct => true)
}

:skip_instruct标志告诉构建器在XML的内部blob上省略了通常的<?xml version="1.0" encoding="UTF-8"?> XML前导码。

XML serializer不会递归调用to_xml,它只是假设来自:methods的所有内容都是简单的标量数据,应该放入XML原始数据中。

答案 1 :(得分:1)

我认为你能做到这一点:

Author.to_xml(:methods => {:books => {:only => :id}})

我在使用AR关联时使用了类似的东西,但不太确定自定义方法。