某フリマアプリのクローンサイトをチームで作成中です。
その時に、seedファイルの扱いに少し困ったので備忘録として残しておきます。
したいこと
商品を出品する時に、「商品の状態」「配送料」..etcなんかは、
データベースに先に値を入れておいて、プルダウンから選択できるようにする
実装
##1. rake taskの作成
lib/tasks/直下にseed.rakeを作成し、以下を記載
Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
desc "Load the seed data from db/seeds/#{File.basename(file)}.
task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
load(file)
end
end
##2. それぞれのseedファイルを作成
db/seedsディレクトリを作成し、そこに「データを入れたいモデル名.rb」のファイルを作成
今回はとりあえず、商品の状態を表すCondition.rbを作成
conditions = Condition.create([
{condition: "新品・未使用"},
{condition: "未使用に近い"},
{condition: "目立った傷や汚れなし"},
{condition: "やや傷や汚れあり"},
{condition: "傷や汚れあり"},
{condition: "全体的に状態が悪い"}])
##3. 実行
あとは実行するだけなので、以下のコマンドをターミナルに
bundle exec rake db:seed:condition
が、問題発生・・・
ローカルの環境ならこのままで良かったのですが、本番環境にデプロイする際に
作成したそれぞれのseedファイルの読み込ませ方が分からず、データを反映できませんでした
解決法
seeds.rbに以下の記述を追加
require "./db/seeds/condition.rb
あとは、本番環境側で反映させたらOK
参考記事
・[本番環境でrake db:seedを使ったデータ投入]
(https://qiita.com/Sotq_17/items/a091fe92dd64d3cf429b)
終わりに
active hashを使えばもうちょっと楽にできたりしたのかな〜なんて思いますが、
納期もあるので一旦この方法で実装しました
他にいい方法があれば教えていただきたいです