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 }
…
正規表現に弱い自分にはさっぱり理解できなかったので、正規表現も勉強しないといけないなと思いました。
Rubyについて日々勉強している新人エンジニアです。初心者向けRuby勉強会のレポートなどを投稿していきます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境