#この記事/メモについて(はじめに)
Twitterの呟きやそれに対するリプライ・コメントは、「ユーザーが送信した情報」をデータとしてデータベースに保存する、と言った仕組みのものです。
しかし、データベースへ格納するデータは必ずしもユーザーや第三者が投稿・送信してきたものだけとは限りません。
例えば、自分が行ったことのあるおすすめの国について紹介するWebサイトを制作しようとした時。
このサイトでは、ユーザーが「ここの国はおすすめだよ!」「この地域の料理、とても美味しかった!」と呟いたものではなく、開発者のみなさんが現地で感じた思いやおすすめのポイントなどを掲載したいですよね。
本記事では、そんな方々のために、開発者が裏側からデータを格納する方法についてご紹介しようと思います。
##手順 (2Stepで簡単にできます!)
裏側からのデータの格納は、
①seedファイルに保存したい初期データを記述
②「$ rails db:seed」というコマンドを入力する
という実に簡単な方法で行うことができます。
①番の記述の仕方を抑えてしまえば、特に難しい内容はありません。以下で詳しく説明していきます。
###Step1 seedファイルに保存したい初期データを記述
例として、Countries(プロダクトに合わせて変更)テーブルに開発者側からデータを入れる場合を考えます。
Countriesテーブルには、nameカラムと、説明のためのbodyカラム、さらに滞在日数を表すdayカラムとその予算(万円)を示すbudgetカラムが存在しているとします。
ここでは、表のような情報を開発者が入れる初期データとして保存していこうと思います。
ID | name | body | day | budget |
---|---|---|---|---|
1 | 韓国 | 低予算で初海外旅行におすすめ! | 3日 | 5 |
2 | スペイン | 自然より建物好きならヨーロッパ! | 1週間 | 15 |
3 | シンガポール | チキンライスは外せない! | 4日半 | 10 |
保存形式は以下の通りです。文字列と整数が混在している場合を考えます。
・name → 文字列(string型)
・body → 長い文字列(text型)
・day → 文字列(string型)
・budget → 整数(integer型)
このようなデータをCountriesテーブルに保存したい時、まずdb/seeds.rb
内に以下のように記述します。
Country.create!(name: '韓国', body: '低予算で初海外旅行におすすめ!', day: '3日', budget: 5)
Country.create!(name: 'スペイン', body: '自然より建物好きならヨーロッパ!', day: '1週間', budget: 15)
Country.create!(name: 'シンガポール', body: 'チキンライスは外せない!', day: '4日半', budget: 10)
レコード1つにつき1行分必要となるイメージです。(たくさんのレコードを保存させたい場合に合わせて、より効率の良い書き方もあります。他にも様々な書き方があるので、是非調べてみてください!)
💡1point豆知識💡
整数(integer型)で保存するbudgetについて、値を「""」や「''」で囲っていないことに注意してください。
→seedsファイルに限らず、プログラミングの世界ではダブル/シングルクオーテーションを用いて囲ったものは基本的に文字列として認識されてしまうので、エラーが生じてしまいます。
###Step2 seedファイルに記述した内容をデータベースに反映させる
ターミナル、またはコマンドプロンプトで以下のコマンドを実行することで、db/seeds.rbに記した内容をデータベースに反映することができます。
$ rails db:seed
以上です!簡単でしたね!
###Step3 データベース内のデータを確認/削除する
データベースに保存されているデータについて確認/削除したいとき、$ rails c
というコマンドを実行します。($ rails c
を終わりにする際はexit
と入力してEnterを押してください。)
こちらの内容はseeds.rbを用いて初期データを格納する場合以外でも頻出のコマンドとなるので、別記事に軽くまとめるつもりです。(気が向いたら。。)
======
$ rails c
は頻出のコマンドとなるので、**データの確認/削除は「$ rails c」!!**と自分に三回言い聞かせましょう。
####データの確認
以下のようにコマンドを入力してください。Countriesテーブルに保存されているデータが出力されるはずです。
$ rails c
irb(main):001:0> Country.all
# => 保存されているデータの出力(確認)
####データの削除
以下のようにコマンドを入力すると、今度はCountriesテーブルに保存されているデータを全て削除することができます。
$ rails c
irb(main):001:0> Country.delete_all
# => 保存されているデータの削除
#参考
railsのseedの書き方いろいろ
https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee
【Rails】CarrierWave + seedで初期データに画像ファイルを投入する
(CarrierWaveをすでに実装している方のうち、初期データに画像を入れたい方はこちらの記事が大変わかりやすいのでぜひ見てください!)
https://remonote.jp/rails-carrierwave-seed