在ruby中重构一个简单脚本以清理mysql数据库

在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约定,您应该能够通过以下代码以更安全的方式实现这一点(例如,如果您有特定的表名前缀或模型的表

我创建了以下脚本来擦除mysql数据库(并重置每个表的主键)。我想知道我应该如何重构它,以及如何从ActiveSupport中获得多元化

代码:

我的逻辑是这样的,models目录中没有.rb和pluralized的每个文件都表示数据库中的一个表,因此我得到了与此应用程序相关的表列表

我使用以下命令运行它:
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,这正是我想要的。干杯。谢谢你指出这一点尼科,这正是我要找的。干杯