2012-01-06 2 views
1

мне нужно, чтобы создать выходной файл XML, как:Как создать XML с помощью Rails?

<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

Что происходит здесь, когда вы делаете render :xml => @data Rails пытается преобразовать @data (который является массивом) в его XML-представление. Это не то, что вы хотите в этом случае.

Определите метод #to_xml на классе Datum, а затем вы можете сделать что-то вроде:

@data.map(&:to_xml).join("\n") 

, который будет вызывать метод #to_xml для каждого объекта, а затем вы будете объединять их, отделяя каждую запись с символом новой строки ,

Если вы хотите хорошо структурированные XML-данные (это не похоже на ваш пример), вы должны использовать что-то вроде Builder, как было предложено jessecurry.

Смежные вопросы