AutomaticRecord
This gem allows lazy creation of :has_one
and :belongs_to
associations as they are accessed.
Installation
Add the following line to your Gemfile:
gem 'automatic_record'
Then run bundle install
and restart your application.
Example Usage
The example below illustrates the most basic use case.
class User < ActiveRecord::Base
# The user model has a related Preference object
has_one :preference
# Make sure preference is created when it is first accessed
auto_create :preference
end
This would allow us to do something like the following in our code:
user = User.create() # preference is currently nil
pref = user.preference # creates preference object on the fly
Advanced Usage
You can provide a hash of default values to the association. These will be passed in to the create
method when the new object is created.
class User < ActiveRecord::Base
has_one :preference
auto_create :preference, :language => 'en', :notifications => true
end
Or, you can pass a lambda to perform some custom initialization. NOTE: The foreign key is not set for you automatically. Take care to create the associated record properly when using this method.
class User < ActiveRecord::Base
has_one :preference
auto_create :preference, ->(user){
user.create_preference(:language => 'en', :notifications => true)
}
end
Testing
AutomaticRecord uses rspec for testing.
RAILS_ENV=test rake db:create db:migrate
rspec spec