我正在尝试了解如何在类中内联使用 Jbuilder 方法。我想将一个对象强制放入长度为 1 的数组中以匹配预期的 JSON 规范。
这是我想要的结果示例(注意 []
包装了与 sets
关联的值):
{
"sets": [{
"set_type": "default_set_type",
"items": [
{
"item_id": "FFFF-0000-111",
"quantity": "1"
}
]
}]
}
到目前为止,这是我的方法:
def to_3pl
@shipment = self
...
Jbuilder.new do |shipment|
# How do I force jbuilder to wrap a single set with []?
shipment.sets do
shipment.set_type 'default_set_type'
shipment.items @shipment.product_options do |product|
shipment.item_id product.product_id.to_s
shipment.quantity product.quantity.to_s
end
end
end
end
这里是我的方法生成的 JSON(请注意,与 sets
关联的值未用 []
包装):
{
"sets": {
"set_type": "default_set_type",
"items": [
{
"item_id": "FFFF-0000-111",
"quantity": "1"
}
]
}
}
我已经查看了 Jbuilder docs ,并且确信有办法做到这一点,但我似乎无法弄清楚。强制 Jbuilder 在类方法中使用 []
包装单个元素的语法是什么?
用解决方案编辑
非常感谢@dddd1919。这是一个已成功实现数组包装器的更新方法:
def to_3pl
@shipment = self
...
Jbuilder.new do |shipment|
# Forces jbuilder to wrap the object with []
shipment.sets Jbuilder.new.array!(['']) do |set|
shipment.set_type 'default_set_type'
shipment.items @shipment.product_options do |product|
shipment.item_id product.product_id.to_s
shipment.quantity product.quantity.to_s
end
end
end
end
最佳答案
如果 shipment.sets
是一个列表,您可以使用 Jbuilder#array!
将数据序列化为 json 数组,例如:
def to_3pl
@shipment = self
...
Jbuilder.new do |shipment|
# How do I force jbuilder to wrap a single set with []?
shipment.sets do
Jbuilder.new.array!(shipment.sets) do |set|
....
end
end
end
end
关于ruby-on-rails - rails Jbuilder : how to format an array of one item as a JSON array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26644207/