Переопределение to_xml для коллекции объектов ActiveRecord - PullRequest
3 голосов
/ 23 апреля 2010

Хорошо, я знаю, что вы можете переопределить метод to_xml для одного экземпляра объекта ActiveRecord, и он прекрасно работает для меня. Но как мне переопределить метод to_xml для сбора объектов?

Предположим, для экземпляра модели Task я реализовал 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'

Как мне сделать эту работу?

Ответы [ 2 ]

3 голосов
/ 04 октября 2010

Ваше переопределение to_xml должно быть объявлено

def to_xml options={}
   ....
end
0 голосов
/ 23 апреля 2010

Что произойдет, если вы просто используете:

render :xml => @tasks

Не использует ли метод рендеринга автоматически созданный вами файл to_xml?

...