ruby-on-rails - rails Jbuilder : how to format an array of one item as a JSON array?

标签 ruby-on-rails json jbuilder

我正在尝试了解如何在类中内联使用 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/

相关文章:

ruby-on-rails - Rails 迁移 create_join_table 与 uuids

ruby-on-rails - 使用 PDFKit 开始新的一页

javascript - 如何使用类动态生成多个div集

asp.net - Sencha Touch 错误您正在尝试解码 ASP.NET 中返回的无效 JSON 字符串 HTML 页面

html - 使用 jbuilder 返回未转义的 html

ruby-on-rails - ActiveAdmin Assets 预编译错误

ruby-on-rails - 如何从已安装的 Spree gem Controller 扩展我的 Controller ?

json - 将 fnRender 与 ajax 源数据表结合使用

ruby-on-rails - 如何在 Rails 3.2 中使用 JBuilder 渲染 json

ruby-on-rails - 使用 JBuilder 内联数组元素