我将嵌套的JSON传递到rails中,如下所示:
{
"product": {
"vendor": "Acme",
"categories":
{
"id": "3",
"method": "remove",
},
"categories":
{
"id": "4"
}
}
}
以更新产品类别。我试图遍历products_controller中的categories属性,以便我可以一次添加/删除产品到多个类别:
def updateCategory
@product = Product.find(params[:id])
params[:product][:categories].each do |u|
@category = Category.find_by(id: params[:product][:categories][:id])
if params[:product][:categories][:method] == "remove"
@product.remove_from_category(@category)
else
@product.add_to_category(@category)
end
end
end
但是,这仅使用第二个类别'更新中的ID并不会迭代这两者。 响应示例JSON:
{
"product": {
"id": 20,
"title": "Heavy Duty Aluminum Chair",
"product_price": "47.47",
"vendor": "Acme",
"categories": [
{
"id": 4,
"title": "Category 4"
}
]
}
}
如您所见,它只添加了ID = 4的类别,并跳过了第3类。
我对rails非常陌生,所以我知道我可能在这里遗漏了一些明显的东西。我已经玩过JSON的格式我也传入了,但它只会让事情变得更糟。
答案 0 :(得分:0)
您需要更改JSON结构。正如您目前所拥有的那样,第二个“类别”引用将覆盖第一个“类别”引用,因为您只能拥有一个键的实例。要获得您想要的,您应该将其更改为:
{
"product": {
"vendor": "Acme",
"categories": [
{
"id": "3",
"method": "remove",
},
{
"id": "4"
}
]
}
}
您还需要将ruby代码更改为:
def updateCategory
@product = Product.find(params[:id])
params[:product][:categories].each do |u|
@category = Category.find_by(id: u[:id])
if u[:method] == "remove"
@product.remove_from_category(@category)
else
@product.add_to_category(@category)
end
end
end