8

Rails v2.3Ruby 1.8で、モデル クラスで次のコードを使用してsql ステートメントを実行すると:

ActiveRecord::Base.connection.execute("select count(*) from cars;")

サーバーコンソールにクエリ結果を表示するにはどうすればよいですか?

私は試した :

rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
p rslt

しかし、正確な結果ではなく、サーバーコンソールに「MySQL結果オブジェクト」のみが返されます。

4

3 に答える 3

13

クエリから mysql の「回答」を取得するには、いくつかの方法があります。each を呼び出すことができ、各行を反復処理します(1行だけ-あなたの場合はカウントします)。each_hash や all_hashes などの他の利用可能なメソッドを確認するには、mysql gem のドキュメントを参照してください。

rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
rslt.each {|mysql_result| puts mysql_result}
于 2011-11-11T16:06:33.900 に答える
7

to_a次のように、結果に対してメソッドを使用できます。

result = connection.execute(sql)
result.to_a

これにより、探しているものが返されます (コンソールに表示される場合は表示されます)。

于 2012-06-26T19:31:11.197 に答える
1

現在お使いの環境により異なります。開発の場合、デフォルトのロガー レベルはdebugで、本番環境の場合はinfoレベルです。次のように使用できます。

class HomeController < ActionController::Base
  def index
    rslt = ActiveRecord::Base.connection.execute("select count(*) from cars;")
    logger.info "#{rslt}"
  end
end

Rails ロギングの詳細については、Mike Naberezny のブログ ( http://mikenaberezny.com/2007/02/24/rails-logging-tips/ ) を参照してください。

于 2011-11-11T15:59:37.477 に答える