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

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
http://ruby-doc.org/core/classes/Object.html#M000334

Will

On Nov 13, 8:30 pm, Frederick C. [email protected]

On Nov 13, 9:29 pm, Mernagh [email protected] wrote:

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs