2010-05-29 38 views
60

Khi tôi chạy truy vấn (ví dụ: MyModel.where(...) hoặc record.associated_things) trong bảng điều khiển, làm cách nào tôi có thể xem các truy vấn cơ sở dữ liệu thực tế đang chạy để tôi có thể hiểu rõ hơn về những gì đang xảy ra?Làm thế nào để hiển thị các truy vấn SQL chạy trong bảng điều khiển Rails?

+0

Andrew, nếu bạn cũng cần chạy lệnh trong broweser, bạn có thể sử dụng https://github.com/igorkasyanchuk/rails_db –

+0

Xem thêm câu trả lời này: http://stackoverflow.com/a/1576221/446106 – mwfearnley

Trả lời

144

Nhập dòng này trong bảng điều khiển

ActiveRecord::Base.logger = Logger.new(STDOUT) 
+0

Hoàn hảo , đúng thứ tôi cần. Có đề nghị nào để đi tìm những thủ thuật nhỏ như những tài liệu này được ghi chép? – randombits

+2

Chắc chắn. http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/ và http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick Plus http : //railscasts.com/ luôn tốt. –

+1

Điều này làm việc cho ray 3+ nhưng không phải 2, xem http://stackoverflow.com/a/1576221 nếu bạn vẫn ở đó :) – rogerdpack

0

Ad-hoc truy vấn ActiveRecord trong console không mặc dù. Dù sao để thay đổi hành vi đó?

Bạn có chắc chắn về điều đó không? Tôi sử dụng giao diện điều khiển tất cả thời gian cho những thứ như thế này. Đối với môi trường phát triển, hành vi mặc định là để ghi lại các truy vấn tới development.log. Bạn có chắc là bạn không thay đổi cấp độ nhật ký trong môi trường của mình không?

Bạn có thấy những điều sau đây trong development.rb không?

config.log_level = :debug 
18

Trong Rails 3+ bạn có thể sử dụng phương pháp to_sql ActiveRecord :: Quan hệ của:

User.where(:id => 3).to_sql 
#=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 3" 
11

Có một phương pháp .explain trong Rails 4.
(.to_sql làm việc quá, nhưng sẽ không hiển thị bao gồm)

Category.includes(:products).explain 
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories 

EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products 

EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1 
0

Từ gần đây, bạn có thể sử dụng điều này:

https://github.com/dejan/rails_panel

Nó bao gồm giao diện điều khiển bảng điều khiển phát triển add-on cho chrome, và tập đá quý mà cần phải được thêm vào ứng dụng của bạn Gemfile như thế này:

group :development do 
    gem 'meta_request' 
end 

Sau đó chạy lại:

bundle install 

Khởi động lại ứng dụng, mở ứng dụng và khởi chạy bảng điều khiển dành cho nhà phát triển và bạn sẽ thấy nó như sau: enter image description here

Các vấn đề liên quan