NOT NULL制約

後付でNOT NULL制約をつける

今回の場合、すでにtitleカラムとcontentはすでにあるので、後付でNOT NULL制約をかけます。 まずはマイグレーションファイルを作ります。

$ rails g migration ChangeColumnToBlog

オプションでnullfalseにします。 またrollbackを考えchangeではなくupnull: falsedownでデフォルトのnull: trueを設定します。

(db/migrate/**************_change_column_to_blog.rb)

class ChangeColumnToBlog < ActiveRecord::Migration[5.2]
  def up
    change_column :blogs, :title, :string, null: false
    change_column :blogs, :content, :text, null: false
  end

  def down
    change_column :blogs, :title, :string, null: true
    change_column :blogs, :content, :text, null: true
  end
end
$ rails db:migrate

以下のようにNOT NULL制約が設定されました。 (db/schema.rb)

create_table "blogs", force: :cascade do |t|
    t.string "title", default: "default title", null: false
    t.text "content", default: "default content", null: false
# (省略)
  end

あらかじめNOT NULL制約を付ける場合

テーブルを作る段階でNOT NULL制約を付ける場合、以下のようにマイグレーションファイルにnull: falseを記載します。

(db/migrate/**************_create_blogs.rb)

class CreateBlogs < ActiveRecord::Migration[5.2]
  def change
    create_table :blogs do |t|
      t.string :title, null: false
      t.text :content, null: false

      t.timestamps
    end
  end
end
$ rails db:migrate