
  Logo design: Kelly Rauwerdink,
    @missingdink,
    Dribbble.
  
Generates ActiveRecord models to fit a pre-existing Postgres database. Now you can use Rails with the db schema you always wanted. It's your convention over configuration.
- Your app is specific to Postgres and proud of it. You use the mature declarative data validation that only a real database can provide.
- You have inherited a database or are more comfortable creating one yourself.
- You're a grown-ass DBA who doesn't want to speak ORM baby-talk.
- Fully automatic. It just works.
- Creates a model for every table.
- Creates a comprehensive initial migration.
- Declares key-, uniqueness-, and presence-constraints.
- Creates associations.
- Adds custom validation methods for CHECKconstraints.
- Set up a postgres db normally
- Set config.active_record.schema_format = :sqlto use a SQLschema.rb
- After you have migrated up a table, use rails generate reactive_record:install
- Go examine your generated models
First Include the reactive_record gem in your project's
Gemfile. Oh by the way, you'll have to use postgres in your
project. Setting up Rails for use with postgres is a bit outside
the scope of this document. Please see [Configuring a Database]
(http://guides.rubyonrails.org/configuring.html#configuring-a-database)
for what you need to do.
gem 'reactive_record'Bundle to include the library
$ bundleNext Tell ActiveRecord to go into beast-mode. Edit your
config/application.rb, adding this line to use sql as the schema
format:
module YourApp
  class Application < Rails::Application
    # other configuration bric-a-brac...
    config.active_record.schema_format = :sql
  end
endNext Create the database(s) just like you normally would:
rake db:createNext Generate a migration that will create the initial table:
$ rails generate migration create_employeesUse your SQL powers to craft some
DDL, perhaps
the "Hello, World!" of DB applications, employees?
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
endLastly Deploy the reactive_record generator:
$ rails generate reactive_record:installGo look at the generated file:
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/ }
endReactive record does not currently attempt to generate any kind of reasonable error message (I'm working on it) :)
Enjoy
Firstly, thank you, contributors!
Also a special thanks to Joe Nelson, @begriffs, for contributions and inspiration; Reactive Record would not exist without his efforts. Thanks to Bendyworks for the 20% time to work on this project!
And, of course, a huge thank you to Kelly Rauwerdink for her amazing ability to make "an art" even when all I can do is sorta half-articulate what I'm talking about. Thanks!

