migrationファイル内でnull: falseをつけるべきかどうか

Railsアプリケーションのmigrationファイル内mにnull: falseと記述するべきか、modelファイルにpresende: trueと記述するべきかどうかについてまとめます。

先に結論を言いますと、両方で設定したほうが良いようです。

migraionファイル

migrationファイルに、null: falseと設定している場合、そのカラムが空のまま保存されるのを防ぐ事ができます。

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :reviews do |t|
      t.string  :name
      t.string  :email null: false
      t.timestamps null: false
    end
  end
end

modelファイル

一方、モデルファイル内で、対象カラムにpresence: trueとバリデーションの設定しても、空のまま保存されることを防げます。

class User < ApplicationRecord
  validates :email, presence: true
end

両方で設定したほうが良い

modelで設定するからmigrationファイルで設定をしなくても良いんじゃないかと思ってたことがあります。それで良いのでしょうか?

結論、両方で設定したほうが良いです。

migrationファイルでの設定は、データベースに対する設定です。つまり、データベースにデータが保存されるときに、対象ファイルが空のときに保存がされないようにするための設定です。

一方のmodelファイル内でのvalidatesの設定は、Railsアプリケーション側の判定です。modelファイル内でpresence: trueを設定しおくと、対象カラムが空のときに、ブラウザ上からはレコードが保存ができません。しかし、DBに直接アクセスしてSQLを実行すれば、データを保存できてしまいます。

そんなことが起きないよう、migraiotnファイルとmodelファイルの両方で設定しましょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする