LoginSignup
0
0

More than 3 years have passed since last update.

【seed】rails db:seedで db/seeds.rb以外を読み込む場合

Posted at

問題

db/seeds/product_suggest.rbに配置してあるデータ

[
  'toothbrush',
  'tooth paste',
  'eye drops',
  'water',
  'tape',
  'eraser',
  'pencil',
  'shirt',
  't-shirt',
  'towel',
].each do |keyword|
  Product::Suggest.create!(keyword: keyword)
end

こちらを、テーブルに読み込ませたいが、今まではdb/seeds.rbに記述したテータのみしか読み込ませた事がなかった。
この場合どのように設定するか検索し、対処した。

検証環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.3
BuildVersion:   19D76
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]
$ rails -v
Rails 5.2.4.2

テーブルの作成

まず、データを流し込むテーブルを作成する。

rails g  model suggest keyword:string

この時、db/seeds/product_suggest.rbで

].each do |keyword|
  Product::Suggest.create!(keyword: keyword)
end

と各データを、keywordとしてcreateしているので、
keyword:stringとカラムを設定する。

もしモデル名を間違えてしまった場合等、rails g(generate) で作成したものを削除したい場合は、

rails destroy model suggest

等とする。

クラス名変更

rails g modelするとその後、
app/models/に
suggest.rbが作成される。

この時、/product_suggest.rbの記述に合わせる為、
app/models/以下にproductファイルを作成し、
その中に、suggest.rbを移動させ、以下のような配置にした。

app/models/product/suggest.rb

更に、suggest.rbのクラス名が最初は、

class Suggest < ApplicationRecord
end

という記述になっているので、
これも合わせる為に、

class Product::Suggest < ApplicationRecord
end

に変更する。

db/seeds.rbの編集

このまま、rails db:seedとしても、読み込まれるのは、db/seeds.rbだけなので、
db/seeds.rbに以下を追加する。

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')) do |file|
  load(file)
end

こちらを記述することで、db/seeds/ディレクトリ以下のファイルで'*.rb'となっているものをすべて読み込んでくれる。

その後、ターミナルで、

rails db:migrate

マイグレーションファイルからsuggestテーブル作成

rails db:seed

データを流し込む。

データの確認

rails dbconsole
mysql> show tables;

テーブル一覧から新規作成できているか確認
shell
mysql> select * from suggests;

テーブル内容の確認。
これでデータが入っている事が確認できる。

rails consoleでも可。

今回の失敗

最初に、

].each do |keyword|
  Product::Suggest.create!(keyword: keyword)
end

という部分をみて、

rails g  model product_suggest keyword:string

と間違ったモデル名で作成してしまった。
これだと、クラス名は、product_suggestのスネークケースから、Rubyのクラスにされる際に、ProductSuggestのキャメルケースに変換され。読み込むファイル(今回だとdb/seeds/product_suggest.rb)に記述されている内容と違ってくる。
このあたりのクラス名とモジュール名の関係を確認できて良かった。今後気をつけていきた

終わりに。

最後まで読んで頂きありがとうございます:bow_tone1:
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。

0
0
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
0
0