সক্রিয় রেকর্ড ব্যবহার করার সময় আমি কীভাবে ডাটাবেসের জন্য সংজ্ঞায়িত সমস্ত সারণীর একটি তালিকা পেতে পারি?
সক্রিয় রেকর্ড ব্যবহার করার সময় আমি কীভাবে ডাটাবেসের জন্য সংজ্ঞায়িত সমস্ত সারণীর একটি তালিকা পেতে পারি?
উত্তর:
কল করুন ActiveRecord::ConnectionAdapters::SchemaStatements#tables
। এই পদ্ধতিটি মাইএসকিউএল অ্যাডাপ্টারে নথিভুক্ত, তবে পোস্টগ্রাইএসকিউএল অ্যাডাপ্টারে নথিবদ্ধ হয়। SQLite / SQLite3 এও পদ্ধতিটি বাস্তবায়িত হয়েছে, তবে নথিভুক্ত।
>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
দেখুন activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21
, পাশাপাশি বাস্তবায়নগুলি এখানে:
পূর্ববর্তী দুটি উত্তরের উপর ভিত্তি করে, আপনি এটি করতে পারেন:
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
রেকর্ডের সংখ্যার সাথে প্রতিটি মডেলকে টেবিল বিমূর্ত করে তালিকাবদ্ধ করতে।
দেখে মনে হয় এর চেয়ে ভাল উপায় হওয়া উচিত তবে আমি কীভাবে আমার সমস্যার সমাধান করেছি তা এখানে:
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
এই কোডটি ধরে নেওয়া হয়েছে যে আপনি ক্লাস এবং উত্স কোড ফাইলগুলির জন্য আদর্শ মডেল নামকরণের কনভেনশনগুলি অনুসরণ করছেন।
schema_migrations
। শুধু সচেতন হতে হবে। ধন্যবাদ :)