Railsのマイグレーションとモデルによるデータの検証機能

Railsのマイグレーションとモデルによるデータの検証機能

みなさんこんにちは、新人の意識高丸です。
今日も初心者向けRuby勉強会、gaienrb #12 に参加してきました。
先週は丁度5章が終わったところなので、6章を進めていきました。
ユーザモデルを作成して認証機能をつくるところを始めました。

RailsではClearance、Authlogic、Devise、CanCanといったユーザ認証の仕組みが既に存在するため、これらを利用すると効率よく開発が行えるようです。
個人的にはDeviseというのはよく聞く名前なので、身近ではよく使われている気がします。

チュートリアルの方は、まず最初にユーザモデルを作成しましたが、ここではRailsのマイグレーション機能の素晴らしさを実感しました。
Railsでは、モデルの変更履歴をすべてバージョンで管理できるマイグレーション機能があります。
インデックスの追加やカラムの変更など、すべてマイグレーションに追加していくことで、一貫性を保ったままDBに変更を加えられます。
変更はすべてバージョン管理されているので、ロールバックなども簡単に行えます。

例えばnameとemailという文字列型のフィールドをもったUserモデルを作る場合、以下のコマンドでマイグレーションを作成できます。


rails generate model User name:string email:string

そうすると以下の様な内容のマイグレーションファイルが生成されます。


class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email

t.timestamps
end
end
end

テーブル名がusersで、文字列型のnameとemailフィールドが定義されているのがわかります。
Railsではモデルに対応するDBのテーブル名はモデル名の複数形になります。
ちなみに、entry -> entriesのように不規則に変化するものも対応しています。
これは、ActiveSupport::Inflectorが変換しているようです。

マイグレーションを作成したら、以下のコマンドでマイグレーションを実行してマイグレーションを最新版まですすめます。


bundle exec rake db:migrate

こうすることで、nameとemailという文字列型のフィールドをもったUserモデルに対応したテーブルがDBに作成されます。

その次に、バリデーション機能の実装をしました。
Railsのモデルにはバリデーション機能があるので、以下のようにモデルに設定をして保存時にモデル側で入力検証を通すことができます。

例えば以下の用に設定すると、nameフィールドがブランクを許さないようにできます。


class User < ActiveRecord::Base
validates :name, presence: true
end

未入力を検査するpresenceの他に以下の様なものもありました

unique ユニークであることをチェック
length 長さ
format 書式(メールアドレスの検査など、正規表現が使える)
numericality 数値である
confirmation 確認入力などに使う

チュートリアルでは、メールアドレスの検証に以下のように正規表現を指定していました


VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }

正規表現に弱い自分にはさっぱり理解できなかったので、正規表現も勉強しないといけないなと思いました。

TAG

  • このエントリーをはてなブックマークに追加
意識 高丸
エンジニア 意識 高丸 takamaru

Rubyについて日々勉強している新人エンジニアです。初心者向けRuby勉強会のレポートなどを投稿していきます。