0

我想知道是否可以使用 RABL 来呈现这样的 xml(不要问我为什么需要这种混乱的结构:D):

<garbagebox>
  <user><id>1</id></user>
  <user><id>2</id></user>
  <article><name>some name here</name></article>
  <customer><rich>yes</rich></customer>
  <article><name>some name here #2</name></article>
</garbagebox>

现在看起来 rabl 禁止在单个父项中具有相同名称的多个节点(集合除外 - 但在集合中所有节点的名称都相同)

例如,如果我这样做:

object :garbagebox
child(Country.first) {attributes :id, :currency}
child(Customer.last) {attributes :id, :name}
child(Country.first) {attributes :id, :currency}

我只得到 2 个孩子而不是 3 个。

有人可以提供任何提示,以便我可以呈现这样的 xml 吗?谢谢。

4

1 回答 1

1

这是一些核心的猴子补丁。需要您自担风险使用它。

更改前:

object @user
child(@user) { attribute :name }
child(@user) { attribute :city }
child(@user) { attribute :name }

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <user>
    <name>leo</name>
  </user>
</user>

猴子补丁:

module Rabl
  module Helpers
    alias_method :data_name_without_uniquify, :data_name
    def data_name(data_token)
      uniquify(data_name_without_uniquify(data_token))
    end

    private

    def uniquify(object)
      Uniquificator.new(object)
    end

    class Uniquificator
      def initialize(object)
        @object = object
      end

      def ==(other)
        false
      end

      def hash
        @object.hash
      end

      def eql?(other)
        false
      end

      def to_s
        @object.to_s
      end

      def method_missing(*args, &block)
        @object.__send__(*args, &block)
      end
    end
  end
end

修补后的结果:

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <user>
    <name>leo</name>
  </user>
  <user>
    <city>LA</city>
  </user>
  <user>
    <name>leo</name>
  </user>
</user>
于 2013-03-13T19:55:30.410 回答