LoginSignup
1
2

More than 3 years have passed since last update.

[Rails]seedファイルごとにデータを管理する

Last updated at Posted at 2020-06-29

某フリマアプリのクローンサイトをチームで作成中です。
その時に、seedファイルの扱いに少し困ったので備忘録として残しておきます。

したいこと

商品を出品する時に、「商品の状態」「配送料」..etcなんかは、
データベースに先に値を入れておいて、プルダウンから選択できるようにする

こんな感じ
スクリーンショット 2020-06-29 17.41.45.png

実装

1. rake taskの作成

lib/tasks/直下にseed.rakeを作成し、以下を記載

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を作成

db/seeds/Condition.rb
conditions = Condition.create([
  {condition: "新品・未使用"},
  {condition: "未使用に近い"},
  {condition: "目立った傷や汚れなし"},
  {condition: "やや傷や汚れあり"},
  {condition: "傷や汚れあり"},
  {condition: "全体的に状態が悪い"}])

3. 実行

あとは実行するだけなので、以下のコマンドをターミナルに

bundle exec rake  db:seed:condition

conditionsテーブルにデータを入れられました!
スクリーンショット 2020-06-29 18.18.27.png

が、問題発生・・・

ローカルの環境ならこのままで良かったのですが、本番環境にデプロイする際に
作成したそれぞれのseedファイルの読み込ませ方が分からず、データを反映できませんでした

解決法

seeds.rbに以下の記述を追加

seeds.rb
require "./db/seeds/condition.rb

あとは、本番環境側で反映させたらOK

参考記事
本番環境でrake db:seedを使ったデータ投入

終わりに

active hashを使えばもうちょっと楽にできたりしたのかな〜なんて思いますが、
納期もあるので一旦この方法で実装しました
他にいい方法があれば教えていただきたいです

参考記事

Railsでseedデータを分割して実行できるようにする
Rails・seedファイルを分割して管理する

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2