概要
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 => {}