RailsでDBのスキーマからvalidationを自動生成するpretty_validationというgemを作りました

タイトルの通りですが、作りました。

sinsoku/pretty_validation

これは何?

DBのスキーマからvalidationを自動生成します。

  • validates_presence_of (NOT NULL制約から生成)
  • validates_numericality_of (columnの型から生成)
  • validates_uniqueness_of (UNIQUE制約から生成)

の3つに対応します。

使い方

いつものようにGemfileに追加し、 bundle install してください。

gem 'pretty_validation'

バリデーションファイルを生成する方法は2つあります。

  1. rake db:migrate の後に自動で生成される
  2. rake validation:generate を手動で実行する

バリデーションのファイル例

例えば、こんなマイグレーションファイルがあるとします。

# db/migrate/20151105090101_create_users.rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.integer :age, null: false
      t.boolean :admin

      t.timestamps null: false
    end
    add_index :users, :name, unique: true
  end
end

このとき、rake db:migrate をすると、一緒にバリデーションファイルも生成される。

# app/validations/user_validation.rb
module UserValidation
  extend ActiveSupport::Concern

  included do
    validates :name, presence: true
    validates :age, presence: true, numericality: true
    validates_uniqueness_of :name
  end
end

このファイルは自動的にUserクラスにincludeされます。
DBから生成できるものは省略し、アプリ特有のバリデーションのみを User クラスに記述することができます。

今後作るかもしれない機能

  • 生成するバリデーションの選択
    • validates_uniqueness_of はDBにアクセスするので、OFFにしたいときがある
  • 対象のモデルを include(exclude) で選択(除外)する機能
  • validates_length_of の対応