LoginSignup
0
1

More than 3 years have passed since last update.

カラムに制約をかけよう ❏Rails❏

Last updated at Posted at 2019-11-29

カラムに制約をかけ、予期せぬデータが保存されるのを防ごう


制約 意味
NOT NULL制約 空データはダメよ
一意性制約 他と被るのはダメよ
外部キー制約 外部キーに対応するテーブルのレコードがないとダメよ


NOT NULL制約

空データは禁止
カラムの後ろにnull: falseを追記

マイグレーションファイル
class CreateTweets < ActiveRecord::Migration[5.2]
  def change
    create_table :tweets do |t|
      t.text :text, null: false
      t.timestamps
    end
  end
end
ターミナル
rails db:migrate

これでtextに値がないツイートは作れないようになりました。


一意性制約

他と同じデータは禁止
add_index :テーブル名, :カラム名, unique: trueを追記

マイグレーションファイル
class CreateTweets < ActiveRecord::Migration[5.2]
  def change
    create_table :tweets do |t|
      t.text :text
    end
    add_index :tweets, :text, unique: true
  end
end
ターミナル
rails db:migrate

これで、同じ内容のテキストは保存できなくなりました。
バルスとツイートできるのは1人だけ。早いもの勝ちとなります。


外部キー制約

外部キーに対応するテーブルのレコードがないとダメ
t.references :対応先のテーブル名, foreign_key: trueを追記

マイグレーションファイル
class CreateTweets < ActiveRecord::Migration[5.2]
  def change
    create_table :tweets do |t|
      t.text :text
      t.references :user, foreign_key: true
    end
  end
end
ターミナル
rails db:migrate

これですべてのツイートが誰かしらのユーザーにひも付きます。
迷子のツイートが現れることはありません。

また、テーブル名_idというカラムが自動で生成されます。
今回はuser_idですね。



ではまた!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1