如何在params中对nested_attributes进行排序

时间:2013-11-22 06:54:20

标签: javascript ruby-on-rails-3 nested-attributes

我试图从JavaScript发布nested_attributes params,比如

  

参数:{“product”=> {“answers_attributes”=> {“1”=> {“contents”=>“春天”,   “questionnaire_id”=>“8”},“3”=> {“questionnaire_id”=>“10”,   “contents”=> {“0”=>“PC”},“etc”=>“”},“0”=> {“contents”=>“Aa”,   “questionnaire_id”=>“7”},“2”=> {“questionnaire_id”=>“9”,   “contents”=>“Ski”}},“sub”=>“0”,“lang”=>“en”},“auth_token”=>“xxxxx”}

但在这种情况下,'answers_attributes'的顺序是1,3,0,2。 在rails3中,将按此顺序创建答案记录。 我想在服务器端(rails)中将answers_attributes参数从1,3,0,2排序到0,1,2,3。

我知道parms [“product”] [“answers_attributes”] .sort可以对顺序进行排序,但params不会更改。 如何通过排序的answers_attributes重建params?

提前致谢。

1 个答案:

答案 0 :(得分:1)

非常简单,

假设您的params

params = {"product"=>{"answers_attributes"=>{
"1"=>{"contents"=>"Spring", "questionnaire_id"=>"8"}, 
"3"=>{"questionnaire_id"=>"10", "contents"=>{"0"=>"PC"}, "etc"=>""} ,
"0"=>{"contents"=>"Aa", "questionnaire_id"=>"7"}, 
"2"=>{"questionnaire_id"=>"9", "contents"=>"Ski"}}, "sub"=>"0", "lang"=>"en"} ,
"auth_token"=>"xxxxx"}

然后就这样做

params['product']['answers_attributes'].sort

更新:使用已排序的答案重建参数

params[:product][:answers_attributes] = Hash[*params[:product][:answers_attributes].sort.flatten]