2015-10-16 57 views
-1

我有這些參數:Ruby on Rails的:從嵌套參數讀取

Parameters: {"controller"=>"parent_wise_fee_payments", "transaction_date"=>"2015-10-16", "action"=>"pay_payments", "id"=>"10", 
    "transactions"=>{"payment_mode"=>"Cash", 
    "1"=>{"payment_id"=>"54", "payment_mode"=>"Cash", "amount"=>"", "parent_id"=>"10", "payment_date"=>"2015-10-16", "title"=>"Second Payment", "payment_note"=>""}, 
    "0"=>{"payment_id"=>"53", "payment_mode"=>"Cash", "amount"=>"600000", "parent_id"=>"10", "payment_date"=>"2015-10-16", "title"=>"First Payment", "payment_note"=>""}, 
    "payment_note"=>""}, "authenticity_token"=>"6jbXWEjBnhQjbWpNiK4cCWPhr/NSDEwul6kH+XcKE/U="} 

的「1」和「0」是不固定的,它們依賴於交易的數量,所以我可能有示例3交易,每個與payment_id,payment_mode,金額,...

我只是有興趣得到每個交易的價值,即值「1」和「0」。但我無法找到辦法做到這一點。

這裏是我的嘗試:

params[:transactions].each do |payment| 
     payment.each do |p| 
      .... p[0][:amount] 
end 
end 

這給出了一個錯誤,因爲付款[0]是 「payment_mode」,它只有1個值,並支付[1]是 「payment_note」。我無法訪問「1」和「0」,即使當我嘗試付款[「0」] [「金額」]和付款[「0」] [:金額]我得到「無法將字符串轉換爲整數」。我也嘗試使用payment.keys來檢查密鑰是否爲「payment_mode」或「payment_note」並放棄它,但我得到了「未定義的數組方法鍵」。我迷失在這裏,我知道我搞砸了,但我真的需要你的幫助。

回答

1

關鍵「transactions」下的值再次是散列值,所以您需要迭代value和key。

這樣做的一種方法是

# This works only in rails, not in plain ruby 
payments = params["transactions"].except(["payment_mode", "payment_note"]) 
payments.each do |key, value| 
    puts "key: " + key 
    puts "values under that key: " + value 
end 

https://repl.it/BRCs/2

看到在這種情況下,數字「0」,「1」將在變量「鍵」和值他們抱着「價值」。