💿
Railsで新しくテーブルを作成するときの基本的な流れ
Railsで新しくモデルを作成するときの備忘メモ
マイグレーションファイルを作成
$ rails g model Test
マイグレーションファイルの編集
マイグレーションファイルを「rails g model Test」で作成すると、次のようなファイルが作成される。
class CreateQuestions < ActiveRecord::Migration[5.2]
def change
create_table :tests do |t|
t.timestamps
end
end
end
基本としては、create_table :tests do |t| から end の間に追加したいカラムの情報をつけていく。
ここでは、string型のtitleカラムと、inter型の No というカラムを追加させる。
なお、255文字以下の文字列ならば string 型、それ以上であれば text 型を使います。
class CreateQuestions < ActiveRecord::Migration[5.2]
def change
create_table :tests do |t|
t.string :title
t.integer :No
t.timestamps
end
end
end
これであとは「rails db:migrate」:を実行すれば、titleカラムとNoカラムとtimestampsカラムを持つ「Test」というテーブル(表のようなもの)が作成される。
マイグレーションファイルをデータベースに反映
$ rails db:migrate
モデルに制約をつけていく
通常、作成したモデルに入れる情報(ここではテーブルに入るデータのようなイメージ)には、好き勝手な情報を入れられないように**制約(validates)**をつけてあげます。
ちなみにモデルファイルを編集したあとは、特にコマンドを実行する必要はありません。
次の例は、空のタイトルが入力されないように Test モデルに制約(バリデーションといいます)をつける例です。
class Question < ApplicationRecord
validates :title, presence: true
end
なお、複数のバリデーションをもたせることもできます。
例えばタイトルの長さを100文字以下にしてほしい場合は次のように記述します。
class Question < ApplicationRecord
validates :title,
presence: true,
length: { maximum: 100 }
end
以下ではよく使うバリデーションを整理
空の値ではないこと
validates :title, presence: true
一意性(かぶらないようにしたいとき)
validates :title, uniqueness: true
長さ
validates :title, length: { minimum: 10 } # 「10文字以上」
validates :title, length: { maximum: 100 } # 「100文字以下」
validates :title, length: { in: 10..100 } # 「10文字以上100文字以下」
validates :title, length: { is: 8 } # 「8文字のみ」
数値であること
例えばinteger型で書いてほしいとき
validates :No, numericality: true
メールアドレス形式
正規表現を駆使していて少し難しいと思うので、コピペが楽
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX }
これで「@が入っているか」「一意性があるか」「空ではないか」といった、メールアドレスのデータとして必要な要件を包含できているので便利です。
Discussion