首页 > 解决方案 > 有没有办法 db:seed 在 Rails 中只有一个表?

问题描述

我的种子中有很多数据,并将它们分成多个文件。我想知道是否有一种方法可以只播种这些表中的一个?在 Laravel 中,我知道可以将播种机分成类,然后调用:

php artisan db:seed --class CertainTableSeeder.

有没有办法在 Rails 中做到这一点?

我有两个包含大量种子数据的文件,通过seeds.rb 中的这个函数加入

Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each do |seed|
    load seed
  end

我试过运行类似的命令

rake db:seed SEED="CountriesTableSeeder.rb"

只是发现这仍然会恢复为运行正常的 db:seed,并且我的播种机设置为在每次播种之前销毁表,但我不想在每次播种时都销毁所有表中的信息。

标签: ruby-on-railsruby

解决方案


使用以下自定义 rake 文件,您可以在db/seeds/文件夹中拥有多个种子文件。

# lib/tasks/custom_seed.rake
# lib/tasks/custom_seed.rake
namespace :db do
  namespace :seed do

    Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].each do |filename|
      task_name = File.basename(filename, '.rb').intern

      task task_name => :environment do
        load(filename)
      end
    end

    task :all => :environment do
      Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each do |filename|
        load(filename)
      end
    end

  end
end

然后,为了运行特定的种子文件,你可以运行

rake db:seed:seed_file_name

要在该文件夹中按顺序运行所有种子文件db/seeds,请运行以下命令

rake db:seed:all

推荐阅读