2016-02-01 57 views
0

考慮設置了一個param設置是這樣的:與params.permit白名單嵌套PARAMS Rails中4

params = ActionController::Parameters.new(
{sync:{ 
    "id1":[{error:"1", balance:"1"}], 
    "id2": 
     [ 
     {error:"2", balance:"2"}, 
     {error:"22", balance:"22"}, 
     .... 
     {error:"n", balance:"n"} 
     ] 
    } 
    } 
) 

怎麼可能到白名單中嵌套鍵 「ID1」 和 「ID2」

params.require(:sync) 
=> {"1"=>[{"error"=>"1", "balance"=>"1"}], "2"=>[{"error"=>"2", "balance"=>"2"}]} 

這是好的,但現在我想更深入。在這個散列中,我想通過鍵從值中獲取每個數組。我怎樣才能做到這一點?

>> params.require(:sync).permit(:id) 
Unpermitted parameters: 1, 2 
=> {} 
+0

[這個線程(https://github.com/rails/rails/issues/9454)包含了各種不同的幾個有用的建議場景。從它的外觀來看,最近的評論(2015年8月以後)與你的情況最相關。 – shannondoah

回答

1

我不喜歡id2的定義方式,但我不知道您是否可以操縱接收數據的方式。

你應該嘗試設置白名單是這樣的:

params.require(:sync).permit({id1: [:error, :balance]}, {id2: [{:error, :balance},{:error, :balance},{:error, :balance}]}) 
+0

嘿感謝您的回答!我也嘗試了在{:error,:balance}這樣的哈希中帶有兩個符號的版本,但是我向我拋出了'SyntaxError:(irb):102:語法錯誤,意外的','expect = =或者,:balance]} ,{id2:[{:error,:balance},{:error,:balance}'我還需要使它更通用,因爲我現在不知道數組將包含多個對象。不幸的是我不能改變收到的格式:( – theDrifter

+0

我認爲模型設計不好,你不能有無限的屬性,應該在一個細節表(或細節模型),它應該是你的原始孩子模型,你應該在某些參數或某個東西中接收這些數據,然後將其重新分配到相應的表中。 –