#制約とは
Railsでテーブルのカラムやデータに制限を加え、想定通りの値が入るようにします。
例えば郵便番号のように数値のデータが欲しいとき、文字列が入ってしまうと機能がおかしくなってしまうこともあります。
そのため、制約を設定します。
#制約の種類
##データ型
一般的によく使われているのがデータ型で、以下のようなものがあります。
string 短い文字
text 長い文字
integer 数値(整数)
float 数値(浮動小数)
date 日付
datetime 日時
time 時刻
boolean 真偽
##NOT NULL制約
空欄を禁止する制約です。null: false
を付けます。
class CreatePostImages < ActiveRecord::Migration[5.1]
def change
create_table :post_images do |t|
t.text :shop_name
t.text :image_id, null: false #これ
t.text :caption
t.integer :user_id
t.timestamps
end
end
end
##UNIQUE制約
重複を禁止する制約です。unique: true
を付けます。
例えば、同じユーザーネームを登録できないようにしたい時などに使えると思います。
class CreatePostImages < ActiveRecord::Migration[5.1]
def change
create_table :post_images do |t|
t.text :shop_name, unique: true #これ
t.text :image_id, null: false
t.text :caption
t.integer :user_id
t.timestamps
end
end
end
##DEFAULT制約
初期値を設定しておく制約です。:default => ''
を付けます。
class CreatePostImages < ActiveRecord::Migration[5.1]
def change
create_table :post_images do |t|
t.text :shop_name, null: false
t.text :image_id, unique: true
t.text :caption, :null => false, :default => 'これは例です。' #これ
t.integer :user_id
t.timestamps
end
end
end
##主キー制約
主キーが必ずあって、重複もしてはいけないという制約です。idなどでよく使われるみたいです。
Railsでは、テーブルを作成する際にidカラムに元々実装されています。
##外部キー制約
IDなどのキーを利用してテーブルとテーブルを関連付けているとき、親元のテーブルにデータが存在していなければいけないという制約です。
やり方はいろいろあるみたいですが、reference型のものを記載します。
t.reference :user
の後にforeign_key: true
を付けます。
このとき、カラム名は```user_id``で、自動でインデックスを割り振ってくれます。嬉しい。笑
class CreatePostImages < ActiveRecord::Migration[5.1]
def change
create_table :post_images do |t|
t.text :shop_name, null: false
t.text :image_id, unique: true
t.text :caption, :null => false, :default => 'これは例です。'
t.references :user, foreign_key: true #これ
t.timestamps
end
end
end
##参考にしたサイト
Railsの外部キー制約とreference型について