2016-06-24 102 views
0

我傳遞嵌套的JSON進入軌道,像這樣:軌道4 - 遍歷嵌套的JSON PARAMS

{ 
    "product": { 
    "vendor": "Acme", 
    "categories": 
     { 
      "id": "3", 
      "method": "remove", 
     }, 
    "categories": 
     { 
      "id": "4" 
     } 
    } 
} 

,以更新產品的類別。我想遍歷類別在我products_controller屬性,這樣我可以添加/刪除產品的多個類別一次:

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類

我是相當新的軌道,所以我知道我可能在這裏丟失了明顯的東西我玩過我傳入的JSON格式,但這隻會讓事情變得更糟。

回答

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 
+0

這是有道理的。如果我改變它,但是在這一行我得到一個錯誤:「沒有將符號隱式轉換爲整數」:「@category = Category.find_by(id:params [:product] [:categories] [:id] )「 – Seanvm

+0

@Seanvm我給我的答案增加了一些。看看是否有幫助。 – rdubya

+0

工作!謝謝! – Seanvm