reactive_record from Chris Wilson is a nifty library that generates ActiveRecord models to fit a pre-existing PostgreSQL database.

You just use typical DDL to define your PostgreSQL tables, run the reactive_record generator, and voilà: it will create a model file for each of your tables, define validations using key/uniqueness/presence constraints, and even set up your associations for you.

Here’s an example employees table from the README:

class CreateEmployees < ActiveRecord::Migration def up execute <<-SQL CREATE TABLE employees ( id SERIAL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, start_date DATE NOT NULL, PRIMARY KEY (id), CONSTRAINT company_email CHECK (email LIKE '%@example.com') ); SQL end def down drop_table :employees end end

And the generated model:

class Employees < ActiveRecord::Base set_table_name 'employees' set_primary_key :id validate :id, :name, :email, :start_date, presence: true validate :email, uniqueness: true validate { errors.add(:email, "Expected TODO") unless email =~ /.*@example.com/ } end

Pretty cool. As Chris says, it’s your convention over configuration. Get the gem or check out the source on GitHub.