我需要创建一个XML文件输出,如:
<data>
<hour>0</hour>
<count>8</count>
</data>
.
.
<data>
<hour>23</hour>
<count>1</count>
</data>
我在控制器中编写了以下代码:
for @k in (0..23)
@data.push(Datum.new(@k,@freq[@k]));
end
class Datum
def initialize(hour, count)
@hour = hour
@count = count
end
end
render xml:@data
但输出结果如下:
tweet-densities-controller-data type="array">
<tweet-densities-controller-datum type="TweetDensitiesController::Datum">#
TweetDensitiesController::Datum:0xacbddc4></tweet-densities-controller-datum>
答案 0 :(得分:2)
您可能需要查看构建器:Generating custom XML for your rails app
答案 1 :(得分:0)
这里发生的是当你render :xml => @data
执行时,Rails正在尝试将@data
(这是一个数组)转换为其XML表示形式。在这种情况下,这不是你想要的。
在您的Datum类上定义#to_xml
方法,然后您可以执行以下操作:
@data.map(&:to_xml).join("\n")
将为每个对象调用#to_xml
方法,然后将它们连接起来,用换行符分隔每个条目。
如果你想要结构良好的XML数据(看起来不像你的例子)那么你应该使用像jessecurry建议的类似Builder的东西。