Добавление пользовательского начального файла


Я хочу заполнить новую функцию фиктивными данными, но не хочу использовать db/seeds.RB-файл, поскольку он уже имеет семена других данных, не имеющих отношения к этой функции.

для запуска по умолчанию seeds.rb файл, вы запускаете команду rake db:seed.

если я создам файл в

3 64

3 ответа:

начните с создания отдельного каталога для хранения пользовательских семян – в этом примере используется db/seeds. Затем создайте пользовательскую задачу, добавив rakefile в свой :

# 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 принимает имя исходного файла в

я попробовал ответ 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>

это будет выглядеть в рельсах.папка root/db/seeds для имени файла без имени .семена.РБ (он добавляет их для вас).

пример:

rake db:seed:single SEED=my_custom_seed

выше будет сеять Rails.root/db/seeds/my_custom_seed.seeds.rb file

слишком сложно! Я просто хотел, чтобы простая задача выполняла каждый файл в каталоге 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