Rails 5.2 Active Record マイグレーションでコンテントデータベースを作る

**[Rails 5.2 で簡単なWikiサイトを作る](Rails 5.2 で簡単なWikiサイトを作る) - Part2**
[Rails 5.2 で簡単なWikiサイトを作る](https://qiita.com/fukmaru/items/625845471df2110cc718) を作るの続きです。

# 環境

- `Rails 5.2.2`
- `ruby 2.5.1p57`
- `psql (PostgreSQL) 10.4`

# 前提条件

本記事では、Rails、ruby、PGのインストールの内容を含みません。

- ruby のインストールは、[こちら](https://qiita.com/Alex_mht_code/items/d2db2eba17830e36a5f1)の記事がわかりやすかったです。
- Ruby on Rails のインストールは、[こちら](https://qiita.com/yoshiokatsuneo@github/items/d75d4fef9e75afb65126#rails%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)の記事がわかりやすかったです。

# はじめに

[git commit log](https://github.com/fukmaru/wiki/commit/60d4ac813d4bea01117a46890ffd2e10c1e4c561)

この記事では、Active Record マイグレーションでコンテントデータベースを作ります。

|カラム|型|説明|
|:----|:----|:----|
|title|string|タイトル|
|body|text|本文|
|is_published|boolean|公開フラグ|

`contents` テーブルでは、ベーシックにこんな感じにしてみようと思います。

Rails Generate コマンドを用いて、テーブルを作成します。[参考](https://qiita.com/zaru/items/cde2c46b6126867a1a64#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E3%82%8B)

```bash
$ rails g model Content title:string body:text is_published:boolean
      invoke  active_record
      create    db/migrate/20190429022702_create_contents.rb
      create    app/models/content.rb
```

マイグレーションして、データベースにテーブルを作成します。

```bash
$ rails db:migrate
== 20190429022702 CreateContents: migrating ===================================
-- create_table(:contents)
   -> 0.0076s
== 20190429022702 CreateContents: migrated (0.0077s) ==========================
```

:coffee: 
ついでに、 便利な [annotate gem](https://github.com/ctran/annotate_models) も使ってみましょう。modelファイルや、controllerファイルの上部にカラムを追記してくれます。

```ruby:./Gemfile
group :development do
  ...
 + gem 'annotate'
end
```

Gemfileに`annotate`を追加したら、`bundle install`です。
さらに、annotateをinstallしておきます。

```bash
$ bundle install
...
$ rails g annotate:install
      create  lib/tasks/auto_annotate_models.rake
```

[参考](https://github.com/ctran/annotate_models#configuration-in-rails)

`annotate`が使えるようになったので、もう一回 `rails db:migrate` します。

```bash
$ rails db:migrate
Annotated (1): app/models/content.rb
```

`./app/models/content.rb` だけ中身を見てみます。こんな感じに、上部にテーブルの内容を追記してくれます。

```rb:./app/models/content.rb
# == Schema Information
#
# Table name: contents
#
#  id           :bigint(8)        not null, primary key
#  body         :text
#  is_published :boolean
#  title        :string
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#

class Content < ApplicationRecord
end
```

さらに、`db/schema.rb`も見ておきましょう。

```rb:./db/schema.rb
ActiveRecord::Schema.define(version: 2019_04_29_022702) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "contents", force: :cascade do |t|
    t.string "title"
    t.text "body"
    t.boolean "is_published"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end
```

# 最後に

[git commit log](https://github.com/fukmaru/wiki/commit/60d4ac813d4bea01117a46890ffd2e10c1e4c561)

# [NEXT!](https://qiita.com/fukmaru/items/318bc4ef1fa5b80e4c9a)

次は、Contentリストページを作っていきます。

# Wikiサービス作りました

(小さく告知させてください:ear:)
簡単なWiki検索を、社内コミュニケーションチャネルから検索できるツールで、「[Poii.io](https://www.poii.io)」と言います。