- db/models/category.rb を開き以下を記述。
class Category < ActiveRecord::Base # 未入力チェック validates_presence_of :category, :message => "が未入力です。" # 文字数チェック(20文字以内/半角全角共通) # 末尾のif文は「categoryが未入力ではない場合だけチェック実行」という意味 validates_length_of :category, :within => 1..20, :message => "を20文字以内で入力して下さい", :if => :category? # 重複チェック validates_uniqueness_of :category, :message => "は既に登録されています" end
- validates_presence_of
- 必須チェック(要するにNULLを許さない)
- validates_inclusion_of
- 入力文字の内容の範囲チェック(例:1〜5の間の数値を入力)
- validates_length_of
- 入力文字の桁数チェック(例:1〜20文字で入力)
- validates_format_of
- ユーザー指定フォーマット(正規表現)での入力内容チェック
文字数チェックも重複チェックも、日本語が問題なくいけて有難い。
今回はDBとしてsqliteを使用しているけど、これがMySQLになったりすると文字化け問題が出てくるかも?
関数チックな書き方でわかりやすいんだけど、それぞれのバリデーションをメソッドとして書くこともできる模様。
一長一短だと思うので、その場その場でどちらが良いのかは考えた方が良いのかも。
参考:
- validateのバリエーション - ザリガニが見ていた...。
- Railsのvalidationを日本語化する方法(おまけ付き) - このブログは証明できない。 - Rails2.1以前の方法。
- i18nによる日本語化 - challenge Ruby on Rails - Rails2.2以降の方法。
- バリデーション(validate)で入力規制をかけよう Ruby on Rails Pro - なるほど、処理パターン毎にバリデーションの指定ができるのね。