NOT NULL制約
後付でNOT NULL制約をつける
今回の場合、すでにtitle
カラムとcontent
はすでにあるので、後付でNOT NULL制約をかけます。
まずはマイグレーションファイルを作ります。
$ rails g migration ChangeColumnToBlog
オプションでnull
をfalse
にします。
またrollbackを考えchange
ではなくup
でnull: false
、down
でデフォルトの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