0

有沒有辦法在rails中遍歷參數? 我有一個嵌套的PARAMS:。遍歷軌道中的嵌套參數4

"request"=>{"name"=>"Gianni Hayes", 
 
    "address"=>"5858 Bernhard Burgs", 
 
    "phone"=>"(972) 399-9601", 
 
    "mobile"=>"777 777 01 02", 
 
    "filled_cartridges_attributes"=>{ 
 
     "0"=>{ 
 
     "cartridge_id"=>"HP laserjet 300", 
 
     "_destroy"=>"false"} 
 
      }, 
 
"description"=>"sakld", 
 
"responsible"=>"15",

可能有許多「filled_cartridges_attributes,所以我需要通過他們在控制器遍歷

+1

the params obje ct基本上只是一個(嵌套的)散列,你可以像正常的散列一樣迭代元素。 'hsh.each'等。 – Slicedpan

回答

0

由於PARAMS基本上是一個哈希你可以使用Hash#each

params = "request"=>{"name"=>"Gianni Hayes", 
    "address"=>"5858 Bernhard Burgs", 
    "phone"=>"(972) 399-9601", 
    "mobile"=>"777 777 01 02", 
    "filled_cartridges_attributes"=>{ 
     "0"=>{ 
     "cartridge_id"=>"HP laserjet 300", 
     "_destroy"=>"false"} 
      }, 
"description"=>"sakld", 
"responsible"=>"15"} 
} 
params["request"].each { |key, value| puts key.to_s + " : " + value.to_s } 
# name : Gianni Hayes 
# address : 5858 Bernhard Burgs 
# phone : (972) 399-9601 
# mobile : 777 777 01 02 
# filled_cartridges_attributes : {"0"=>{"cartridge_id"=>"HP laserjet 300", "_destroy"=>"false"}} 
# description : sakld 
# responsible : 15 

或者以遞歸方式將其作爲哈希散列值:

def deep_traverse(hash) 
    hash.each do |key, val| 
     puts key 
     if val.is_a?(Hash) 
     display val 
     else 
     puts val 
     end 
    end 
end 
deep_traverse params 
# request 
# Gianni Hayes 
# 5858 Bernhard Burgs 
# (972) 399-9601 
# 777 777 01 02 
# HP laserjet 300 
# false 
# sakld 
# 15 
0

簡單地說,就像散列一樣。如果你有以下散列:

response = {"request"=>{"name"=>"Gianni Hayes", 
         "address"=>"5858 Bernhard Burgs", 
         "phone"=>"(972) 399-9601", 
         "mobile"=>"777 777 01 02", 
         "filled_cartridges_attributes"=>{ 
           "0"=>{ 
           "cartridge_id"=>"HP laserjet 300", 
           "_destroy"=>"false"} 
         }, 
         "description"=>"sakld", 
         "responsible"=>"15"} 
         } 
      } 

現在,這裏是訪問filled_cartridges_attributes方式:

response["request"]["filled_cartridges_attributes"].each do |_, value| 
    puts value["cartridge_id"] # => HP laserjet 300" 
    ... 
    ... 
end 
0

params[:request][:filled_cartridges_attributes]會返回一個哈希,所以你可以把它用eacheach_valueeach_key 喜歡在迭代:

params[:request][:filled_cartridges_attributes].each_value {|value| p value}