Some other general notes on your Gist:
* has_many associations should be plural. Things will usually work with them named otherwise, but you may encounter odd behavior.
* the data model doesn't seem quite right - custom_field_infos should have a contact_id column and a custom_field_id column (to indicate which contact & field this record has data for). It shouldn't need a user_id column unless there's something else going on that's not mentioned in the Gist.
--Matt Jones