Aktif kaydı kullanırken veritabanı için tanımlanan tüm tabloların bir listesini nasıl alırım?
Aktif kaydı kullanırken veritabanı için tanımlanan tüm tabloların bir listesini nasıl alırım?
Yanıtlar:
Çağrı ActiveRecord::ConnectionAdapters::SchemaStatements#tables
. Bu yöntem MySQL bağdaştırıcısında belgelenmemiştir, ancak PostgreSQL bağdaştırıcısında belgelenmiştir. SQLite / SQLite3 de uygulanan, ancak belgelenmemiş yönteme sahiptir.
>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21
Buradaki uygulamaların yanı sıra bakın :
Önceki iki cevaba göre şunları yapabilirsiniz:
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
bir tabloyu özetleyen her modeli kayıt sayısı ile listelemek için.
Rails 5.2 için bir güncelleme
Rails 5.2 ApplicationRecord
için Array
, tablonuzun adlarını almak için de kullanabilirsiniz . İmechemi belirtildiği gibi sadece, bu yöntem aynı zamanda dönecektir unutmayın ar_internal_metadata
ve schema_migrations
bu dizide.
ApplicationRecord.connection.tables
Görünüşe göre daha iyi bir yol olmalı, ama sorunumu şu şekilde çözdüm:
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
Bu kod, sınıflar ve kaynak kodu dosyaları için standart model adlandırma kurallarını izlediğinizi varsayar.
schema_migrations
tablo içerir . Sadece farkında olun. Teşekkürler :)