matthewrudy / has_one_accessor

Access attributes on HasOne Associations as though they were on the base class

This URL has Read+Write access

matthewrudy (author)
Tue Nov 25 05:55:55 -0800 2008
commit  d7f3bb806599c1eac4d002000f366af4a9c7b9c8
tree    7706b6f762a359a5b7d7dae00d332db8047e305b
parent  cee1dd66f76ab0b195cb8dca854d6d95bfea2682
name age message
file MIT-LICENSE Loading commit data...
file README
file Rakefile
file init.rb
directory lib/
README
has_one_accessor
==========

A simple plugin to allow you to use an ActiveRecord HasOne Association's attributes like those of your own model.
It will give you nice setter and getter methods that will dynamically build the association, set it, and save it only on 
save of the underlying record.
This is useful for taking input from forms;
  User.new(params[:user]) is much nicer than
  
  auth_params = params[:user].delete(:auth)
  user = User.new(params[:user])
  user.authentication || user.build_authentication
  user.authentication.openid_url = auth_params[:openid_url]
  ...blah blah blah...

Simplicity and peace of mind is but a `has_one_accessor` away

Example
=======

  class User
    has_one :authentication
    has_one_accessor :authentication, [:openid_url, :facebook_token], :allow_blank => false
  end

this gives us

  user.authentication_openid_url
  user.authentication_openid_url=
  user.authentication_facebook_token
  user.authentication_facebook_token=

and with :allow_blank => false, it'll remove records with blank values on save.

also, if you prefer to generate methods without a :prefix

  has_one_accessor :authentication, :google_id, :prefix => false

will give us

  user.google_id
  user.google_id=

with all of the same niceties

Copyright (c) 2008 [Matthew Rudy Jacobs], released under the MIT license