在ruby中重构一个简单脚本以清理mysql数据库
我创建了以下脚本来擦除mysql数据库(并重置每个表的主键)。我想知道我应该如何重构它,以及如何从ActiveSupport中获得多元化 代码: 我的逻辑是这样的,models目录中没有.rb和pluralized的每个文件都表示数据库中的一个表,因此我得到了与此应用程序相关的表列表 我使用以下命令运行它:在ruby中重构一个简单脚本以清理mysql数据库,mysql,ruby-on-rails,ruby,activerecord,pluralize,Mysql,Ruby On Rails,Ruby,Activerecord,Pluralize,我创建了以下脚本来擦除mysql数据库(并重置每个表的主键)。我想知道我应该如何重构它,以及如何从ActiveSupport中获得多元化 代码: 我的逻辑是这样的,models目录中没有.rb和pluralized的每个文件都表示数据库中的一个表,因此我得到了与此应用程序相关的表列表 我使用以下命令运行它:railsrunner脚本/cleandb.rb 这应该如何重构,我该如何实现多元化?基于Rails约定,您应该能够通过以下代码以更安全的方式实现这一点(例如,如果您有特定的表名前缀或模型的表
railsrunner脚本/cleandb.rb
这应该如何重构,我该如何实现多元化?基于Rails约定,您应该能够通过以下代码以更安全的方式实现这一点(例如,如果您有特定的表名前缀或模型的表名):
print "This will WIPE your database. Continue? (y/n): "
if $stdin.gets.chomp.downcase == "y"
# iterate over all model definition files
Dir["#{Rails.root}/app/models/**/*.rb"].map do |model_filename|
# get the file base_name
model_file_basename = File.basename(model_filename,File.extname(model_filename))
# get the model class from the file basename
model_class = model_file_basename.camelize.constantize
# ask the model (ActiveRecord::Base subclass) to give you its table_name
table_name = model_class.table_name
# wipe the table
puts "Wiping table #{table_name}.."
ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name};"
end
else
puts "Terminating script..."
end
请参阅关于表格名称的文档:基于Rails约定,您应该能够通过以下代码以更安全的方式实现这一点(例如,如果您有特定的表格名称前缀或模型的表格名称):
print "This will WIPE your database. Continue? (y/n): "
if $stdin.gets.chomp.downcase == "y"
# iterate over all model definition files
Dir["#{Rails.root}/app/models/**/*.rb"].map do |model_filename|
# get the file base_name
model_file_basename = File.basename(model_filename,File.extname(model_filename))
# get the model class from the file basename
model_class = model_file_basename.camelize.constantize
# ask the model (ActiveRecord::Base subclass) to give you its table_name
table_name = model_class.table_name
# wipe the table
puts "Wiping table #{table_name}.."
ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name};"
end
else
puts "Terminating script..."
end
请参阅关于表名称的文档:如何更改代码是基于意见的,而不是堆栈溢出的问题类型。请阅读帮助部分:尝试使用pluralize,如果它不起作用,请发布您遇到的问题的详细信息。您好,为什么不在mysql中使用show tables列出所有表并截断它们?尝试发布以下内容:您应该如何更改代码是基于意见的,而不是堆栈溢出的问题类型。请阅读帮助部分:尝试使用pluralize,如果它不起作用,请发布有关您遇到的问题的详细信息。嗨,为什么不在mysql中使用show tables列出所有表并截断它们呢?尝试发布以下内容:感谢您指出这一点,Nico,这正是我想要的。干杯。谢谢你指出这一点尼科,这正是我要找的。干杯