2012-03-01 66 views
3

如何通过参数在我的控制器中循环以便我可以更改它们的值?如何通过参数正确迭代

此:

... 
params[:contact][:relationships_attributes].each do |rel| 
    rel[:contact_ids] = [rel[:contact_ids]] 
end 
... 

返回的错误:

# can't convert Symbol into Integer 

提供我在的地方多选择使用单一的选择框更多的上下文。所以控制器期待一个数组,但是它获得了一个单一的值。

这里是我的PARAMS:

{"utf8"=>"✓", 
"_method"=>"put", 
"authenticity_token"=>"8FrW59t9vzSep+jEGceMdE/b5q69i5hrEp08yZJJk0o=", 
"contact"=> 
    {"first_name"=>"John", 
    "last_name"=>"Smith", 
    "email_addresses_attributes"=> 
    {"0"=> 
     {"value"=>"[email protected]", 
     "type"=>"Home", 
     "_destroy"=>"false", 
     "id"=>"4f4eea6dbe5a2ccf03000031" 
     }, 
     "1"=>{"value"=>"[email protected]", 
     "type"=>"Home", 
     "_destroy"=>"false", 
     "id"=>"4f4eea7dbe5a2ccf03000035" 
     } 
    }, 
    "phone_numbers_attributes"=> 
    {"0"=> 
     {"value"=>"555-334-5959", 
     "type"=>"Home", 
     "_destroy"=>"false", 
     "id"=>"4f4eea64be5a2ccf0300002c"} 
    }, 
    "addresses_attributes"=> 
    {"0"=> 
     {"type"=>"Home", 
     "street_address"=>"12345 Any Rd", 
     "city"=>"Anytown", 
     "state"=>"CO", 
     "country"=>"United States", 
     "_destroy"=>"false", 
     "id"=>"4f4eea64be5a2ccf0300002d" 
     } 
    }, 
    "relationships_attributes"=> 
    {"1330623965418"=> 
     {"contact_ids"=>"4f4e6696be5a2ca2a7000045", 
     "title"=>"Wife", 
     "_destroy"=>"false" 
     } 
    } 
    }, 
    "commit"=>"Update Contact", 
    "id"=>"4f4e6696be5a2ca2a7000045" 
} 
+0

@muistooshort我更新了帖子,包括我的PARAMS。 – 2012-03-01 17:57:39

回答

18

当你在这样一个哈希使用each

params[:contact][:relationships_attributes].each do |rel| 

块说法,rel,实际上是在位置的关键两个元素的数组0和位置1的值。然后你的块试图访问阵列,就像它是一个哈希:

rel[:contact_ids] 

并解释了您的错误消息:您无法使用符号索引阵列。

我想你想要做的事更是这样的:

params['contact']['relationships_attributes'].each do |k, v| 
    v['contact_ids'] = [ v['contact_ids'] ] unless v['contact_ids'].is_a?(Array) 
end 

这会给你这样的结构:

{ 
    :contact => { 
    :relationships_attributes => { 
     '1330623965418' => { 
     :contact_ids => ['4f4e6696be5a2ca2a7000045'] 
     :title => 'Wife', 
     :_destroy => 'false' 
     } 
     ... 
+0

完美的工作就像一个魅力! – 2012-03-01 18:35:17