如何将表中数据导入yml文件

测试时需要加载夹具,而当夹具内的数据量很大时,如果表中有合适数据,可以直接从表中导入,这样可以节省很多时间。

在lib/task目录下创建fixtures.rake文件,文件内容为:
namespace :db do  
    
  namespace :fixtures do  
    
    desc 'Create YAML test fixtures for references. Defaults to development database. Set RAILS_ENV to override.'   
    
    task :dump_references => :environment do  
      sql = "SELECT * FROM %s"  
      dump_tables = ["table1","table2"...] # 需要导入的表们
      ActiveRecord::Base.establish_connection(:development)   
      dump_tables.each do |table_name|   
        i = "000"  # 表中每条数据的编号
        file_name = "#{RAILS_ROOT}/test/fixtures/#{table_name}.yml"  
        p "Fixture save for table #{table_name} to #{file_name}"  
        File.open(file_name, 'w') do |file|   
          data = ActiveRecord::Base.connection.select_all(sql % table_name)   
          file.write data.inject({}) { |hash, record|   
            hash["#{table_name}_#{i.succ!}"] = record   
            hash   
          }.to_yaml   
        end  
      end  
    end #task
 
  end #namespace :fixtures do 

end #namespace :db do

然后执行rake命令: rake db:fixtures:dump_references

你可能感兴趣的:(sql,Ruby,ActiveRecord,Rails)