2014-04-10 55 views
1

我試圖用Ruby和PostgreSQL中獲取數據,並將它們存儲到一個數組格式化數據陣列,對於我有一個小腳本:紅寶石

腳本:

require 'pg' 

conn=PGconn.connect(:hostaddr=>"192.168.111.136", :port=>5432, :dbname=>"sentinel_poc",:user=>"sdn_mehdi", :password=>'skyline123') 

res = conn.exec("SELECT dns_name FROM dns_table group by dns_name").to_a 

a_dns = [] 

res.each { |r| a_dns << r } 
puts a_dns.join(",") 

的結果是:

{"dns_name"=>"youtube.com          "},{"dns_name"=>"stackoverflow.com           "},{"dns_name"=>"cisco.com           "},{"dns_name"=>"facebook.com          "},{"dns_name"=>"yahoo.com           "},{"dns_name"=>"onf.com           "},{"dns_name"=>"safe.com           "},{"dns_name"=>"linkedin.com          "},{"dns_name"=>"amazon.com          "},{"dns_name"=>"google.com          "},{"dns_name"=>"java.com           "},{"dns_name"=>"live.com           "},{"dns_name"=>"rails.com           "},{"dns_name"=>"postgresql.com         "},{"dns_name"=>"hp.com           "},{"dns_name"=>"wikipedia.org          "} 

我需要的只是每個域名的名字!類似{"youtube.com","google.com","java.com","rails.com","hp.com"}

任何建議將不勝感激。

+2

工作,你所期望的結果('{「youtube.com 「,」google.com「,...}')不能存在於Rails中,它看起來像一個哈希,但只有鍵(或值?)。你的意思是像一組DNS名稱的東西?或者包含':dns_name => string_of_dns_name'的散列數組? – MrYoshiji

+0

類似於dns名稱的數組! – midobAck

回答

0

只考慮你的代碼,並做小的變化,我想下面將爲您

a_dns = [] 

res.each { |r| a_dns << r.values[0].strip } 
puts a_dns 
+1

謝謝Alok它的工作原理;)並感謝所有人。 – midobAck

3

我想你需要:

res.flat_map(&:values) 
# or if you have hashes having size more then 1, then use the below 
res.map { |h| h["dns_name"] } 
# to strip leading and trailing whit spaces 
res.map { |h| h["dns_name"].strip } 
+0

我嘗試了你的建議,但它不起作用! – midobAck

+0

@midobAck請更具體一些,有什麼不工作? – Magnuss

+0

@midobAck你有什麼錯誤或什麼? –