Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

某フリマアプリのクローンサイトをチームで作成中です。
その時に、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ファイルを分割して管理する

fffuka
エンジニア目指して日々学習中です!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away