使用Jbuilder将所有记录的一个属性合并到数组中

Merging one attribute for all records into array using Jbuilder

我有一个产品集合,每个产品都有 has_many 个标签。我想组合所有标签的名称,以便我有一个包含所有标签名称的数组。

期望的输出:

{
    "title": "Product1", 
    "tags": ["name1", "name2", "name3"]
}

我当前的 jbuilder 给我:

{Products: [{
    "title": "Product1",
    "tags":[
        {"tag1":
           {"name": "name1"}
         },
        {"tag2": 
           {"name": "name2"}
         },
        {"tag3":
           {"name": "name3"}
         }
      ]
}]}

我现在的jbuilder。

json.array! @products do |product|
    json.title product.title
    json.tags product.tags do |tag|
        json.name tag.name
    end
end

感谢您的帮助!

只需从每个标签中提取标签名称即可!

json.array! @products do |product|
    json.title product.title
    json.tags product.tags.map(&:name)
end

如果标签是一个关系,您可以使用 pluck 来提高效率

json.array! @products do |product|
    json.title product.title
    json.tags product.tags.pluck(:name)
end