ActiveSchema
ActiveSchema makes ActiveRecord a bit DRYer. It discovers associations, such as belongs_to and has_many, using foreign keys, and it adds validations to ensure constraints on data, like NOT NULL and maximum length, are honored.
An example
If you have a table structure like this (arrows indicate foreign keys)
ActiveSchema would link your models like below
class Prisoner belongs_to :facility end class Facility has_many :facilities belongs_to :warden end class Warde has_one :facility end
Usage
Put
gem 'activeschema'
in your Gemfile.
ActiveSchema can be enabled per model, or you can choose to make it available everywhere.
Either way, it must be activated by the active_schema
class method. Per model:
class Model < ActiveRecord::Base active_schema end
In ActiveRecord::Base:
class ActiveRecord::Base active_schema end
Foreign key support by ‘foreigner’
Foreign key information is extracted by the Foreigner library.
It has out-of-the-box support for MySQL, Postgresql, and SQL2003.
Rails 3 and Ruby 1.9.2
ActiveSchema has only been tested on Rails 3 and Ruby 1.9.2. It may work elsewhere, but there really is no guarantee.
Preloading the associations
The speed at which MySQL supplies foreign key information can, at times, be leisurely, to say the least.
To circumvent this, ActiveSchema supports foreign key extraction without hitting the database.
Instead, it reads the information from the dumped “schema.rb” file, which of course must be current.
Adjusted configuration:
schema_feeder = ActiveSchema::SchemaFeeder.new schema_feeder.read("path/to/schema.rb") ActiveSchema.configure do |c| c.feeder = schema_feeder end