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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Nov-14 01:30 UTC
Re: Access an Objects attribute as a string with HABTM
On Nov 13, 9:29 pm, Mernagh <wmern...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> 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> Will--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Nov 13, 9:29 pm, Mernagh <wmern...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > 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 > > > Will--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---