1. ホーム
  2. ruby-on-rails

カスタムシードファイルの追加

2023-09-04 02:33:19

質問

新しい機能にダミーデータを投入したいのですが、db/seeds.rb ファイルはすでにこの機能に無関係な他のデータを持っているので、使用したくありません。

デフォルトの seeds.rb ファイルを実行するには、コマンド rake db:seed .

にファイルを作成すると db というディレクトリに seeds_feature_x.rb というディレクトリで、そのファイルを実行する(だけ)には、rakeコマンドはどのように見えるでしょうか?

どのように解決するのですか?

カスタムシードを格納するための別のディレクトリを作成することから始めます - この例では db/seeds . 次に、カスタムタスクを作成するために、rakefile を lib/tasks ディレクトリに追加します。

# 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 --tasks または rake -T .