カラムに制約をかけ、予期せぬデータが保存されるのを防ごう
制約 | 意味 |
---|---|
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
ですね。
ではまた!