Làm cách nào để có được danh sách tất cả các bảng được xác định cho cơ sở dữ liệu khi sử dụng bản ghi hoạt động?
Làm cách nào để có được danh sách tất cả các bảng được xác định cho cơ sở dữ liệu khi sử dụng bản ghi hoạt động?
Câu trả lời:
Gọi ActiveRecord::ConnectionAdapters::SchemaStatements#tables
. Phương pháp này không có tài liệu trong bộ điều hợp MySQL, nhưng được ghi lại trong bộ điều hợp PostgreSQL. SQLite / SQLite3 cũng có phương thức được triển khai, nhưng không có giấy tờ.
>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
Xem activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21
, cũng như các triển khai ở đây:
Dựa trên hai câu trả lời trước, bạn có thể làm:
ActiveRecord::Base.connection.tables.each do |table|
next if table.match(/\Aschema_migrations\Z/)
klass = table.singularize.camelize.constantize
puts "#{klass.name} has #{klass.count} records"
end
để liệt kê mọi mô hình trừu tượng hóa một bảng, với số lượng các bản ghi.
Có vẻ như nên có một cách tốt hơn, nhưng đây là cách tôi giải quyết vấn đề của mình:
Dir["app/models/*.rb"].each do |file_path|
require file_path # Make sure that the model has been loaded.
basename = File.basename(file_path, File.extname(file_path))
clazz = basename.camelize.constantize
clazz.find(:all).each do |rec|
# Important code here...
end
end
Mã này giả định rằng bạn đang tuân theo các quy ước đặt tên mô hình chuẩn cho các lớp và tệp mã nguồn.
schema_migrations
bảng. Chỉ cần lưu ý. Cảm ơn :)