Rails 3のmodelに関してメモ

ユーザモデル


class User < ActiveRecord::Base

# 名前に関する validate
# :presence -> 未入力はエラー
# :unique -> 入力された名前がすでに DB に存在すればエラー
# (モデルだけの validate では完全に一意性を保証できないので,)
# (必ずテーブル定義側でも一意性に関する指定を行っておくこと.)
# :length -> 長さは最大 32 文字まで
validates :name, :presence => true,
:uniqueness => true,
:length => { :maximum => 32 }

# メールに関する validate
# :unique -> 入力されたメールがすでに DB に存在すればエラー
# (モデルだけの validate では完全に一意性を保証できないので,)
# (必ずテーブル定義側でも一意性に関する指定を行っておくこと.)
# :length -> 長さは最大 32 文字まで
# :format -> メールアドレスの形式でなければエラー
# (:with -> 正規表現で形式を指定する)
validates :email, :uniqueness => true,
:length => { :maximum => 32 },
:format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }

# 年齢に関する validate
# :numericality -> 数字でなければエラー
# :inclusion -> 0 歳から 120 歳まででないとエラー
# (:in で指定したリストの要素のいずれかに該当しないとエラー )
# (0..120 は 0 から120 までの要素を持つリスト 0..12 = [0, 1, ..., 120])
validates :age, :numericality => true,
:inclusion => { :in => 0..120 }

# 都道府県に関する validate
# :inclusion -> 中国地方の県でなければエラー
# (:in で指定したリストの要素と完全に一致しないといけないので,)
# (例えば,"岡山"のように"県"が抜けている入力もエラーとなる. )
validates :pref, :inclusion => { :in => ["鳥取県", "島根県", "岡山県", "広島県", "山口県"] }

# 好きな食べ物に関する validate
# :length -> 1 文字以上 32 文字以下でなければエラー
# :exclusion -> うどん,または,お好み焼きという入力であればエラー
# (:in で指定したリストの要素のいずれかに該当するとエラー)
validates :likes, :length => { :minimum => 1, :maximum => 32},
:exclusion => { :in => ["うどん", "お好み焼き"] }

# パスワードに関する validate
# :confirmation -> パスワードがパスワード再入力と一致しなければエラー
# (view で"validate 対象の項目名" + "_confirmation"という項目を )
# (作成しておくこと. )
# (この場合は,password_confirmation という入力項目が view で必要となる. )
# (テーブルやモデルには password_confirmation のカラムやフィールドは必要ない.)
# :length -> 4 文字以上 32 文字以下でなければエラー
# (:minimum と :maximum と使用する代わりに :within での指定も可能 )
validates :password, :confirmation => true,
:length => { :within => 4..32 }

# 利用規約の同意に関する validate
# :acceptance -> 利用規約に同意するチェックボックスをチェックしなければエラー
# (:terms が User モデルのフィールドにも users テーブルのカラムにも定義されていないことに注意.)
validates :terms, :acceptance => true

end

エラーメッセージの指定

:message オプションを指定すればよい.

:presence => true のように Boolean を指定する場合
Boolean の代わりに :message を設定した Hash を指定するようにする.
validates :name, :presence => { :message => "名前を入力してください." }

length => {
maximum => 32 } のように Hash を指定する場合

指定する Hash に :message オプションも設定する.
validates :name, :length => { :maximum => 32, :message => "名前は32文字以内で入力してください." }