Ruby on Rails
Update has_and_belongs_to_many Attributes

UpdateHabtmAttributes Plugin

A modified and “pluginized” version of
storing-additional-data-on-join-tables-with-rails

Short description:

Lets you update custom attributes in has_and_belongs_to_many relationship tables.

Download:
Rightclick → Save As…

Installation:

Just unpack the zip file into your vendor/plugins folder:

vendor/plugins/UpdateHabtmAttributes
vendor/plugins/UpdateHabtmAttributes/init.rb
vendor/plugins/UpdateHabtmAttributes/lib
vendor/plugins/UpdateHabtmAttributes/lib/update_habtm_attributes.rb

Restart your webserver!

Example:

We have members that manage DJ profiles. Every member can be part of as many DJ profiles as wished.
The relationship table looks like this: disc_jockeys_members(disc_jockey_id, member_id, status).

josh $ ./script/console
>> m = Member.find 1
>> dj = DiscJockey.find 1
>> m.disc_jockeys.push_with_attributes(dj, :status => ‘invalid’) Add the DJ profile to the member with the status ‘invalid’
>> m.disc_jockeys.find(:all, :conditions => “disc_jockeys_members.status = ‘valid’”) Returns an empty array
>> m.disc_jockeys.update_attributes(dj, :status => ‘valid’) Change the status to ‘valid’ (this is the interesting part!)
>> m.disc_jockeys.find(:all, :conditions => “disc_jockeys_members.status = ‘valid’”) Returns an array with one item :-)

Remember: you can also pass the ID of the DJ object as the first parameter, and after that you can pass as many key/value
attributes as you like!
>> m.disc_jockeys.update_attributes(1, :status => ‘valid’, :some_other_attr => ‘jabbadabbadoo’, ...)

Have fun with this plugin! :-)
Joshua Muheim | www.josh.ch