Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

ユーザー登録のバリデーション設定例

ユーザー登録時にユーザー名やメールアドレスなどの項目のバリデーションチェックの設定例を備忘として残します。
 
1)存在チェック
 
$ vi app/models/user.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name
  validates :name, :presence => true
  validates :email,:presence => true
end

 
2)文字数チェック
 
$ vi app/models/user.rb
 
validates :name, :presence => true, :length => { :maximum => 50}
 
3)メールアドレスフォーマット
 
$ vi app/models/user.rb

class User < ActiveRecord::Base
  validates :name, :presence => true, :length => { :maximum => 50}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email,:presence => true, :format => { :with => VALID_EMAIL_REGEX }
end

※正規表現
\A
 文字列の先頭にマッチ
[\w+\-.]+
 少なくとも一つのワード文字、プラス、ハイフン、ドット
[a-z\d\-.]+
 少なくとも一つの英小文字、数値、ハイフン、ドット
\.
 文字列ドット
[a-z]+
 少なくとも一つの英小文字
\z
 文字列の最後にマッチ
i
 大文字小文字を区別しない
 
4)メールアドレスの一意性チェック
 
$ vi app/models/user.rb

class User < ActiveRecord::Base
  validates :name, :presence => true, :length => { :maximum => 50}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email,:presence => true, :format => { :with => VALID_EMAIL_REGEX },:uniqueness => { :case_sensitive => false }
end

上記のようにemailのバリデーションに、大文字小文字は区別しない一意性チェックを追加します。
 
:uniqueness => { :case_sensitive => false }