我使用:only和:methods参数调用ActiveRecord对象上的to_xml。
我包含的方法返回AR对象的集合。这样做没有:只有param,但是当添加它时我只得到我的对象的默认to_s表示。
即
<author><books>#<Book:0x107753228></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)
答案 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关联时使用了类似的东西,但不太确定自定义方法。