ruby-on-rails - 有没有办法 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,并且我的播种机设置为在每次播种之前销毁表,但我不想在每次播种时都销毁所有表中的信息。
解决方案
使用以下自定义 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
推荐阅读
- excel - 如何按计划通过SSRS将多个查询导出到一个带有工作表的excel文件?
- mysql - 关注用户和标签系统
- javascript - 使用python 2 selenium单击并选择javascript下拉菜单的值
- java - 自定义 maven 插件执行失败并出现 classnotfound
- javascript - 替代使用开关设置状态 ReactJS
- pandas - 为什么将 Dask 系列转换为分类会减慢计算速度?
- android - onCreateView、onActivityCreated 和 onStart 调用了两次,使用片段
- java - Spring:Autowired字段在从另一个类方法调用的方法中为null,其中该字段不为null
- ms-access - MS Access VBA 获取 WinSCP 传输的结果
- php - 为什么多语言数据显示为“??????” 在邮递员/手机中,但不在网络应用程序中