1

mysql2 gem を使用してクエリからの出力を解析しようとしています。

以前は、次を使用していました。

response = JSON.parse(response.body)
a = response.map{|s| {label: s['Category'], value: s['count'].to_i} }

次に、mysql2 クエリを使用します。

results = db.query(sql)
results.map do |row|
  puts row
end

出力

{"Category"=>"Food", "count"=>22}
{"Category"=>"Drinks", "count"=>12}
{"Category"=>"Alcohol", "count"=>9}
{"Category"=>"Home", "count"=>7}
{"Category"=>"Work", "count"=>2}

「Category」を「:label」に、「count」を「:value」に。

results = db.query(sql)
results.map do |row|
  {label: row['Category'], value: row['count'].to_i} }
end

望ましい出力

{:label=>"Food", :value=>22}
{:label=>"Drinks", :value=>12}
{:label=>"Alcohol", :value=>9}
{:label=>"Home", :value=>7}
{:label=>"Work", :value=>2}
4

1 に答える 1

2

コードに 2 つの誤りがあります。

1) 2 つの右中括弧があります。

                                               #   HERE
                                               #   | |
results.map do |row|                           #   V V
  {label: row['Category'], value: row['count'].to_i} }
end

2) map() は配列を返しますが、配列をどこにも保存しないため、ruby はそれを破棄します。

records = results.map do |row|
  {label: row['Category'], value: row['count'].to_i }
end

p records

証拠は次のとおりです。

mysql> select * from party_supplies;
+----+----------+-------+
| id | Category | count |
+----+----------+-------+
|  1 | Food     |    22 |
|  2 | Drinks   |    12 |
+----+----------+-------+
2 rows in set (0.00 sec)

.

require 'mysql2'

client = Mysql2::Client.new(
  host: "localhost", 
  username: "root",
  database: "my_db",
)

results = client.query("SELECT * FROM party_supplies")


records = results.map do |row|
  { label: row['Category'], value: row['count'] }
end

p records


--output:--
[{:label=>"Food", :value=>22}, {:label=>"Drinks", :value=>12}]

出力は「count」フィールドがすでに int であることを示しているため、 to_i() の呼び出しは冗長であることに注意してください。

于 2013-09-05T02:58:30.230 に答える