Pardee, Roy
2008-May-13 22:03 UTC
Uninitialized constant exception when trying to navigate a has_many => through relationship
Hey All, I''m trying to do a many-to-many relationship w/has_many, :through and having trouble. I want to classify my Projects into one or more ResearchAreas. So I have a Project model, a ResearchArea model, and a ProjectsResearchArea model to link them. So--many-to-many between Projects & ResearchAreas. I''m not sure where I went wrong, but when I try to traverse the hm=>t relationship (from either Project or ResearchArea) I get "NameError: uninitialized constant ResearchArea::Projects" (see below for details). However, I can traverse the simple has_many relationship to my join model (illustrated below). Can anybody tell me what I''ve done wrong? Thanks! -Roy Migration: create_table :research_areas, :force => true do |t| t.string :name, :null => false t.string :abbreviation t.timestamps end create_table :projects_research_areas, :force => true do |t| t.integer :project_id t.integer :research_area_id end Models: class ProjectsResearchArea < ActiveRecord::Base belongs_to :projects belongs_to :research_areas end class ResearchArea < ActiveRecord::Base has_many :projects_research_areas, :dependent => :delete_all has_many :projects, :through => :projects_research_areas end class Project < ActiveRecord::Base has_many :projects_research_areas, :dependent => :delete_all has_many :research_areas, :through => :projects_research_areas end Console session: C:\railsapps\collabtrac>ruby script\console Loading development environment (Rails 2.0.2) >> ra = ResearchArea.find(:first) => #<ResearchArea id: 20, name: "Behavior", abbreviation: nil, created_at: "2008 -05-13 12:50:50", updated_at: "2008-05-13 12:50:50"> >> prj = Project.find(:first) => #<Project id: 2, name: "Adolescent Depression Screening", abbreviation: "ASC" , description: "Tests a brief screening instrument for screening ad...", grant_n umber: "3", status_id: 2, start_date: "2008-06-27", end_date: "2008-04-29", fund er_id: 3, funding_mechanism: nil> >> ra.projects_research_areas.count => 0 >> prj.projects_research_areas.count => 0 >> ra.projects NameError: uninitialized constant ResearchArea::Projects from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_suppo rt/dependencies.rb:478:in `const_missing'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /base.rb:1750:in `compute_type'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /reflection.rb:125:in `send'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /reflection.rb:125:in `klass'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/has_many_through_association.rb:140:in `find_target'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:133:in `load_target'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:55:in `reload'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:77:in `inspect'' from c:/ruby/lib/ruby/1.8/irb.rb:298:in `output_value'' from c:/ruby/lib/ruby/1.8/irb.rb:151:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:259:in `signal_status'' from c:/ruby/lib/ruby/1.8/irb.rb:147:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:146:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:70:in `start'' from c:/ruby/lib/ruby/1.8/irb.rb:69:in `catch'' from c:/ruby/lib/ruby/1.8/irb.rb:69:in `start'' from c:/ruby/bin/irb.bat:15>> ?> Roy Pardee Research Analyst/Programmer Group Health Center For Health Studies (Cancer Research Network) (206) 287-2078 Google Talk: rpardee --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Ryan Bigg (Radar)
2008-May-13 22:38 UTC
Re: Uninitialized constant exception when trying to navigate a has_many => through relationship
belongs_to''s should be singular. It should belong_to :project. Reads like "belongs to a project" instead of "belongs to a projects" --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Pardee, Roy
2008-May-14 00:31 UTC
Re: Uninitialized constant exception when trying to navigate a has_many => through relationship
Ach--nevermind--figured this out on my ferry ride home. The problem is my join model--I was using plural versions of the model names in belongs_to, and they need to be singular. So changing to this: class ProjectsResearchArea < ActiveRecord::Base belongs_to :project belongs_to :research_area end Fixed me up. Sorry for any wasted brain cycles... -Roy -----Original Message----- From: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org [mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org] On Behalf Of Pardee, Roy Sent: Tuesday, May 13, 2008 3:04 PM To: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Subject: [Rails] Uninitialized constant exception when trying to navigate a has_many => through relationship Hey All, I''m trying to do a many-to-many relationship w/has_many, :through and having trouble. I want to classify my Projects into one or more ResearchAreas. So I have a Project model, a ResearchArea model, and a ProjectsResearchArea model to link them. So--many-to-many between Projects & ResearchAreas. I''m not sure where I went wrong, but when I try to traverse the hm=>t relationship (from either Project or ResearchArea) I get "NameError: uninitialized constant ResearchArea::Projects" (see below for details). However, I can traverse the simple has_many relationship to my join model (illustrated below). Can anybody tell me what I''ve done wrong? Thanks! -Roy Migration: create_table :research_areas, :force => true do |t| t.string :name, :null => false t.string :abbreviation t.timestamps end create_table :projects_research_areas, :force => true do |t| t.integer :project_id t.integer :research_area_id end Models: class ProjectsResearchArea < ActiveRecord::Base belongs_to :projects belongs_to :research_areas end class ResearchArea < ActiveRecord::Base has_many :projects_research_areas, :dependent => :delete_all has_many :projects, :through => :projects_research_areas end class Project < ActiveRecord::Base has_many :projects_research_areas, :dependent => :delete_all has_many :research_areas, :through => :projects_research_areas end Console session: C:\railsapps\collabtrac>ruby script\console Loading development environment (Rails 2.0.2) >> ra = ResearchArea.find(:first) => #<ResearchArea id: 20, name: "Behavior", abbreviation: nil, created_at: "2008 -05-13 12:50:50", updated_at: "2008-05-13 12:50:50"> >> prj = Project.find(:first) => #<Project id: 2, name: "Adolescent Depression Screening", abbreviation: "ASC" , description: "Tests a brief screening instrument for screening ad...", grant_n umber: "3", status_id: 2, start_date: "2008-06-27", end_date: "2008-04-29", fund er_id: 3, funding_mechanism: nil> >> ra.projects_research_areas.count => 0 >> prj.projects_research_areas.count => 0 >> ra.projects NameError: uninitialized constant ResearchArea::Projects from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_suppo rt/dependencies.rb:478:in `const_missing'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /base.rb:1750:in `compute_type'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /reflection.rb:125:in `send'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /reflection.rb:125:in `klass'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/has_many_through_association.rb:140:in `find_target'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:133:in `load_target'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:55:in `reload'' from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record /associations/association_proxy.rb:77:in `inspect'' from c:/ruby/lib/ruby/1.8/irb.rb:298:in `output_value'' from c:/ruby/lib/ruby/1.8/irb.rb:151:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:259:in `signal_status'' from c:/ruby/lib/ruby/1.8/irb.rb:147:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:146:in `eval_input'' from c:/ruby/lib/ruby/1.8/irb.rb:70:in `start'' from c:/ruby/lib/ruby/1.8/irb.rb:69:in `catch'' from c:/ruby/lib/ruby/1.8/irb.rb:69:in `start'' from c:/ruby/bin/irb.bat:15>> ?> Roy Pardee Research Analyst/Programmer Group Health Center For Health Studies (Cancer Research Network) (206) 287-2078 Google Talk: rpardee --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Pardee, Roy
2008-May-14 00:31 UTC
Re: Uninitialized constant exception when trying to navigate a has_many => through relationship
Ah, quite right--thanks! ________________________________ From: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org [mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org] On Behalf Of Ryan Bigg (Radar) Sent: Tuesday, May 13, 2008 3:39 PM To: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Subject: [Rails] Re: Uninitialized constant exception when trying to navigate a has_many => through relationship belongs_to''s should be singular. It should belong_to :project. Reads like "belongs to a project" instead of "belongs to a projects" --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Olaf S.
2008-May-27 22:27 UTC
Re: Uninitialized constant exception when trying to navigate a has_many => through relationship
Just had the same problem and was solved with one quick research. THANKS TO THE GREAT COMMUNITY! Roy Pardee wrote:> Ah, quite right--thanks! > > ________________________________ > > From: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > [mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org] On Behalf Of Ryan Bigg > (Radar) > Sent: Tuesday, May 13, 2008 3:39 PM > To: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > Subject: [Rails] Re: Uninitialized constant exception when trying to > navigate a has_many => through relationship > > > belongs_to''s should be singular. > > It should belong_to :project. Reads like "belongs to a project" instead > of "belongs to a projects"-- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---