添加一个自定义种子文件

我想用虚拟数据填充一个新的特性,但是不想使用db / seeds.rb文件,因为它已经有种子其他数据与这个特性无关。

要运行默认的seeds.rb文件,可以运行命令rake db:seed

如果我在名为seeds_feature_x.rbdb目录中创build一个文件,那么rake命令看起来像只运行那个文件?

首先创build一个单独的目录来保存你的自定义种子 – 这个例子使用db/seeds 。 然后,通过向lib/tasks目录中添加一个rakefile来创build一个自定义任务:

 # lib/tasks/custom_seed.rake namespace :db do namespace :seed do Dir[Rails.root.join('db', 'seeds', '*.rb')].each do |filename| task_name = File.basename(filename, '.rb') desc "Seed " + task_name + ", based on the file with the same name in `db/seeds/*.rb`" task task_name.to_sym => :environment do load(filename) if File.exist?(filename) end end end end 

这rakefile接受db/seeds目录(不包括.rb扩展名)的种子文件的名称,然后运行它,因为它会运行seeds.rb 。 您可以通过从命令行发出以下命令来执行rake任务:

 rake db:seed:file_name # Name of the file EXCLUDING the .rb extension 

更新:现在它应该在运行rake --tasksrake -T时列出种子任务。

我尝试了zeantsoi的答案,但它并没有给我我想要的,它做了一个目录中的所有文件。 砍掉它,并得到这个。

 namespace :db do namespace :seed do task :single => :environment do filename = Dir[File.join(Rails.root, 'db', 'seeds', "#{ENV['SEED']}.seeds.rb")][0] puts "Seeding #{filename}..." load(filename) if File.exist?(filename) end end end 

要使用这个,请执行以下操作:

 rake db:seed:single SEED=<seed_name_without_.seeds.rb> 

这将在Rails.root / db / seeds文件夹中查找没有.seeds.rb的文件名(它会为你添加这些文件)。

工作示例:

 rake db:seed:single SEED=my_custom_seed 

上面的代码将Rails.root/db/seeds/my_custom_seed.seeds.rb文件

太复杂! 我只想要一个简单的任务来执行db / seeds目录下的每个文件,而不传入任何文件名。

 # lib/tasks/seed.rake desc "Run all files in db/seeds directory" namespace :db do task seed: :environment do Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].each do |filename| puts "seeding - #{filename}. for reals, yo!" load(filename) end end end