to_xml с дополнительным методом, который возвращает хеш в Rails / ActiveRecord - PullRequest
1 голос
/ 08 апреля 2011

У меня есть класс что-то вроде этого:

class Product < ActiveRecord::Base

  # .... some stuff

  def prices
    # Make hash like { "Regular" => 10, "Discount" => 8 }
  end
end

Я беру это из базы данных и пробую to_xml на нем:

Product.find(id).to_xml(:methods => [:prices])

Но если не получается при хэше цен

... some XML
<prices>Regular10Discount8</prices>
... some more XML

to_json работает как положено.

Какой самый простой способ изменить формат, чтобы он выглядел примерно так:

<prices>
  <price name="Regular">10</price>
  <price name="Discount">8</price>
</prices>

1 Ответ

2 голосов
/ 09 апреля 2011

Я думаю, что вам осталось сделать to_xml форматирование самостоятельно:

class Product < ActiveRecord::Base

  def prices 
    ...
  end

  def to_xml(options = {})
    super(options) do |xml|
      if prices.empty?
        xml.tag! 'prices' # empty tag
      else
        xml.prices do
          prices.each do |name, val|
            xml.price val, 'name' => name
          end
        end
      end
      yield(xml) if block_given?
    end
  end

end

, чем просто Product.find(id).to_xml

...