Joe
Joe

Reputation: 3402

NameError: uninitialized constant - Un-allowed syntax in ActiveRecord?

I have two resources that I'm trying to join - Package and Listing through a join table SubmittedPackage. I'm using Ruby 1.9.3-p125 and Rails 3.2.1 with PostgreSQL 9.1.3. The models look as follows.

class Package < ActiveRecord::Base
  has_many :submitted_packages
  has_many :listings, :through => :submitted_packages

class Listing < ActiveRecord::Base
  has_many :submitted_packages
  has_many :packages, :through => :submitted_packages

class SubmittedPackages < ActiveRecord::Base
  belongs_to :package
  belongs_to :listing

In Rails Console I keep getting NameError: uninitialized constant Listing::SubmittedPackage

If I replace the SubmittedPackage resource with Drum it will work (this of course includes having the appropriate table created and so forth).

Is :submitted_packages in conflict with something in Rails or ActiveRecord?

Any ideas why this is breaking?

Thanks in advance!

UPDATE: As a work-around I explicitly defined the :class_name for the has many relationship in the Listing and Package model. This has at least gotten things working, however, it's still is unclear to me why it was necessary to begin with. What Rails or Ruby naming convention was being broken by :submitted_packages ?

class Package < ActiveRecord::Base
  has_many :submitted_packages, :class_name => 'SubmittedPackages'
  has_many :listings, :through => :submitted_packages

class Listing < ActiveRecord::Base
  has_many :submitted_packages, :class_name => 'SubmittedPackages'
  has_many :packages, :through => :submitted_packages

class SubmittedPackages < ActiveRecord::Base
  belongs_to :package
  belongs_to :listing

Upvotes: 0

Views: 412

Answers (1)

PedroSena
PedroSena

Reputation: 653

If SubmittedPackage is the JoinTable, I guess it should have many listings, but I'm seeing just many packages and many submitted_packages.

HTH

Upvotes: 1

Related Questions