Ich bin vorbei verschachtelte JSON in Schienen wie so:Rails 4 - Iterate durch verschachtelte JSON params
{
"product": {
"vendor": "Acme",
"categories":
{
"id": "3",
"method": "remove",
},
"categories":
{
"id": "4"
}
}
}
, um die Kategorie zu einem Produkt zu aktualisieren. Ich versuche, die Kategorien in meinem products_controller Attribut zu durchlaufen, so dass ich hinzufügen/entfernen, um ein Produkt zu mehreren Kategorien auf einmal:
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
Dies ist jedoch nur die zweiten ‚Kategorien‘ ID in dem Update verwendet und doesn wiederhole nicht beide. Beispiel Antwort JSON:
{
"product": {
"id": 20,
"title": "Heavy Duty Aluminum Chair",
"product_price": "47.47",
"vendor": "Acme",
"categories": [
{
"id": 4,
"title": "Category 4"
}
]
}
}
Wie Sie sehen können, hat es nur die Kategorie mit ID = 4 und übersprungen Kategorie 3.
ich ziemlich neu bin auf Schienen, damit ich weiß, ich bin Vermutlich fehlt hier etwas offensichtlich. Ich habe mit dem Format des JSON herumgespielt, das ich auch passiere, aber es hat alles nur noch schlimmer gemacht.
, die Sinn macht. Wenn ich dies jedoch ändere, bekomme ich eine Fehlermeldung "> keine implizite Umwandlung von Symbol in Integer" in dieser Zeile: "@category = Category.find_by (id: params [: product] [: categories] [: id]) " – Seanvm
@Seanvm Ich habe meiner Antwort ein bisschen mehr hinzugefügt. Sehen Sie, ob das hilft. – rdubya
Das hat funktioniert! Vielen Dank! – Seanvm