17

これが私が使用しているコードです:

# Run the query against the database defined in .yml file.
# This is a Mysql::result object - http://www.tmtm.org/en/mysql/ruby/
@results = ActiveRecord::Base.connection.execute(@sql_query)

私の見解では、値を確認するために私が行うことは次のとおりです。

<pre><%= debug @results %></pre>
Outputs: #<Mysql2::Result:0x007f31849a1fc0>

<% @results.each do |val| %>
   <%= val %>
<% end %>
Outputs: ["asdfasdf", 23, "qwefqwef"] ["sdfgdsf", 23, "asdfasdfasdf"]

select * from Personしたがって、のようなクエリを実行すると、次のような結果セットが返されると想像してください。

ID      Name      Age
1       Sergio    22
2       Lazlow    28
3       Zeus      47

各値を繰り返し処理して出力するにはどうすればよいですか?

ここのドキュメントは、存在すると思われるメソッドを試したので役に立ちませんが、インタープリターはそれらのメソッドが存在しないというエラーを表示します。間違ったドキュメントを使用していますか?

http://www.tmtm.org/en/mysql/ruby/

ありがとう!

4

4 に答える 4

33

mysql2 gemを使用している場合は、mysql2結果オブジェクトを取得しているはずです。ドキュメントによると、次のことができるはずです。

results.each do |row|
  # conveniently, row is a hash
  # the keys are the fields, as you'd expect
  # the values are pre-built ruby primitives mapped from their corresponding field types in MySQL
  # Here's an otter: http://farm1.static.flickr.com/130/398077070_b8795d0ef3_b.jpg
end

こちらのドキュメントをご覧ください

したがって、あなたの場合、次のことができます

<% @results.each do |val| %>
   <%= "#{val['id']}, #{val['name']}, #{val['age']}" %>
<% end %>

編集:間違ったドキュメントを参照しているようです。Mysql2gemsドキュメントを確認してください。

于 2012-05-31T15:47:56.447 に答える
15

whichActiveRecord::Base.connection.exec_queryの代わりにaを使用してみてください(rails 3.1 以降で利用可能)ActiveRecord::Base.connection.executeActiveRecord::Result

.rowsその後、、、、などのさまざまな方法でアクセスでき.eachます.to_hash

ドキュメントから:

result = ActiveRecord::Base.connection.exec_query('SELECT id, title, body FROM posts')
result # => #<ActiveRecord::Result:0xdeadbeef>


# Get the column names of the result:
result.columns
# => ["id", "title", "body"]

# Get the record values of the result:
result.rows
# => [[1, "title_1", "body_1"],
      [2, "title_2", "body_2"],
      ...
     ]

# Get an array of hashes representing the result (column => value):
result.to_hash
# => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
      {"id" => 2, "title" => "title_2", "body" => "body_2"},
      ...
     ]

# ActiveRecord::Result also includes Enumerable.
result.each do |row|
  puts row['title'] + " " + row['body']
end
于 2016-05-24T02:06:44.520 に答える
2

Look for @results.fields for column header.

Example: @results = [[1, "Sergio", 22],[2, "Lazlow", 28],[3, "Zeus", 47]]

@results.fields do |f|
  puts "#{f}\t"  # Column names
end

puts "\n"

@results.each do |rows| # Iterate through each row
  rows.each do |col| # Iterate through each column of the row
    puts "#{col}\t"
  end
  puts "\n"
end

Hope it is helpful.

于 2016-08-30T12:04:12.427 に答える