バリデーションを追加してみる

  • 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になったりすると文字化け問題が出てくるかも?

関数チックな書き方でわかりやすいんだけど、それぞれのバリデーションをメソッドとして書くこともできる模様。
一長一短だと思うので、その場その場でどちらが良いのかは考えた方が良いのかも。



参考: