测试时需要加载夹具,而当夹具内的数据量很大时,如果表中有合适数据,可以直接从表中导入,这样可以节省很多时间。
在lib/task目录下创建fixtures.rake文件,文件内容为:
然后执行rake命令: rake db:fixtures:dump_references
在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