はじめに
以前書いた、下記の続き。
https://qiita.com/ryosuketter/items/1d9b620fa2508cfda37b
今回は、Railsで初期データ(seed)をサクッと入れてみます。
seedファイルとは
seedファイルは、簡単に言うと初期データのことです。
具体的に、どういう初期データを、どれくらいDBに入れるかは db/seeds.rb
に書きます。
モデルの作成
今回は記事の初期データを作成するとしましょう(データ構造はだいぶ簡易的です)。
記事のモデルを作成して、それをTOPページにリンクをつけて一覧表示させたいとします。
記事モデルの作成してみます。
$ rails g model Article title:string body:text
モデルをgenerateすると、マイグレーションファイルも作成されます。
class CreateArticles < ActiveRecord::Migration[5.2]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
マイグレーションファイルの内容に従って、テーブルを作成したい場合は、以下のコマンド
$ rails db:migrate
すると、articles
テーブルが作られます(DBは、MySQLを使っています)。
mysql> describe * from articles;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | YES | | NULL | |
| body | text | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
コントローラの作成
$ rails g controller articles
記事詳細ページ用のアクションを書きます。
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
end
end
paramsですが、これはRailsから送られてくる情報(リクエストパラメータ)を受け取るためのメソッドで、主に2種類あります。
- Getメソッドのクエリパラメータのデータ
- Postメソッドで、主にformから送信されるデータ
今回は、TOPページからGetメソッドのクエリパラメータを送ります。
それを、showアクションにあるparams[:id]
でクエリパラメータを受け取っています。
メソッドは、Article.find
なので、Article
テーブルの中からidが一致するデータを取得して、記事テンプレートに中にデータを入れて表示させます。
コントローラの命名について
コントローラ名は複数形で作るのが基本ですが、単数形でも作成可能です。どちらかにするという規約はありません。
アクションが複数になりそうであれば、複数形にするのが基本で、TOPコントローラのように、アクションが1個(今回でいうとindex アクション
)だけになりそうであるならば、単数形でも大丈夫です。
参考: https://qiita.com/EastResident/items/45696af3f1e07e2df311 のコメント欄
seedファイルの作成
少し脱線したかもですが、seedファイルの作成に戻ります。
100.times do |i|
Article.create!(
title: "Title #{i+1}",
body: "Body #{i+1}",
)
end
こう書くことで、100回、Articleモデル(articlesテーブル)に、タイトルと本文に仮のテキストに挿入ごとに足されてゆく数字を挿入する。という意味になります。
seedファイルの内容をDBに反映
seedファイルの作成ができたら、
$ bundle exec rake db:seed
を、実行することで、seedファイルに書かれた内容をDBに反映させることができます。
以上です!