我想知道是否有可能使用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 forbilds在单个父级中具有相同名称的多个节点(除了集合 - 但在集合中所有节点都被命名为相同)
例如,如果我这样做:
object :garbagebox
child(Country.first) {attributes :id, :currency}
child(Customer.last) {attributes :id, :name}
child(Country.first) {attributes :id, :currency}
我只有2个孩子而不是3个。
有人可以提供任何提示,以便我可以渲染这样的xml吗?感谢。
答案 0 :(得分: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>
Monkey patch:
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>