Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby on Rails | Validation | validates_each

概要

validates_each

詳細

ActiveRecordで、validation時にvalidates_eachを利用することで、
複数のフィールドに対して、同じチェックを行うことができます。

サンプル

テーブル定義
CREATE TABLE "articles" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  "title" varchar(255), 
  "text" text, 
  "created_at" datetime, 
  "updated_at" datetime
);
Validation
class Article < ActiveRecord::Base
  has_many :comments, dependent: :destroy
  validates_each :title, :text do |record, attr, value|
    record.errors.add(attr, 'must be capitalize') unless value == value.capitalize
  end
end
試行

rails console(pry)で試行します。

[1] pry(main)> a = Article.new
=> #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil>
[2] pry(main)> a.title = "not capitalize"
=> "not capitalize"
[3] pry(main)> a.text = "not capitalize"
=> "not capitalize"
[4] pry(main)> a.valid?
=> false
[5] pry(main)> a.errors.messages
=> {:title=>["must be capitalize"], :text=>["must be capitalize"]}
[6] pry(main)> a.title = "Capitalize"
=> "Capitalize"
[7] pry(main)> a.text = "Capitalize"
=> "Capitalize"
[8] pry(main)> a.valid?
=> true
[9] pry(main)> a.errors.messages
=> {}