Access an Objects attribute as a string with HABTM

I have searched many sites for the solution. And maybe there is none or more likely it is so easy no one mentions it.

The problem is this. I have an class called Event which has a HABTM relationship with Note.

I can do the following with no problems e = Event.new e['name'] = 'test' e['state'] = 'started'

But I cannot access the notes attribute in the same way e.notes << Note.find(:all) e.notes.size #=> 11 e['notes'] #=> nil

Why is it I can access e.name as e['name'] but not e.notes as e ['notes']?

And is there a work around to access notes only knowing the string name ("notes")?

Will

I have searched many sites for the solution. And maybe there is none or more likely it is so easy no one mentions it.

The problem is this. I have an class called Event which has a HABTM relationship with Note.

I can do the following with no problems e = Event.new e['name'] = 'test' e['state'] = 'started'

But I cannot access the notes attribute in the same way e.notes << Note.find(:all) e.notes.size #=> 11 e['notes'] #=> nil

Why is it I can access e.name as e['name'] but not e.notes as e ['notes']?

Because name is an attribute (ie backed by some column on your table), but notes isn't (its an association). The and = methods are equivalent to read/write_attribute, which as their names suggest are for playing with attributes.

And is there a work around to access notes only knowing the string name ("notes")?

Read up on your ruby (in particular the send method)

Fred

Thanks Fred. I had a look at the send method. That is exactly what I needed. Also thanks for not giving the answer in code since I would probably not have read up on the send method and fully understood it.

A good explanation of the send method for anyone else that wanders here is http://www.softiesonrails.com/2007/8/15/ruby-101-methods-and-messages

and the API is defined here

Will