【seed】rails db:seedで db/seeds.rb以外を読み込む場合
問題
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
テーブルの作成
$ 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;
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)に記述されている内容と違ってくる。
このあたりのクラス名とモジュール名の関係を確認できて良かった。今後気をつけていきた
終わりに。
最後まで読んで頂きありがとうございます
転職の為、未経験の状態からRailsを学習しております。正しい知識を着実に身に着け、実力のあるエンジニアになりたいと考えています。継続して投稿していく中で、その為のインプットも必然的に増え、成長に繋がるかと考えています。
今現在、初心者だからといって言い訳はできないですが、投稿の内容に間違っているところや、付け加えるべきところが多々あるかと思いますので、ご指摘頂けると幸いです。この記事を読んで下さりありがとうございました。
Author And Source
この問題について(【seed】rails db:seedで db/seeds.rb以外を読み込む場合), 我々は、より多くの情報をここで見つけました https://qiita.com/waniwaninowani/items/385ce6f9c0c7870a2321著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .