2016-02-01 58 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

我认为模型设计不好,你不能有无限的属性,应该在一个细节表(或细节模型),它应该是你的原始孩子模型,你应该在某些参数或某个东西中接收这些数据,然后将其重新分配到相应的表中。 –