NameError:uninitialized constant - ActiveRecord中不允许的语法?

时间:2012-05-04 23:19:28

标签: ruby ruby-on-rails-3 activerecord

我有两个我想要加入的资源 - 通过连接表SubmittedPackage打包和列出。我正在使用Ruby 1.9.3-p125和Rails 3.2.1和PostgreSQL 9.1.3。模型如下所示。

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

在Rails控制台中,我不断收到 NameError:uninitialized constant Listing :: SubmittedPackage

如果我用 Drum 替换 SubmittedPackage 资源,它将起作用(这当然包括创建适当的表等等)。

是:submitted_pa​​ckages与Rails或ActiveRecord中的内容冲突了吗?

为什么这会破裂?

提前致谢!

更新:作为一种解决方法,我在清单和包模型中明确定义了:class_name,它有很多关系。这至少让事情变得有效,但是,我仍然不清楚为什么有必要开始。什么Rails或Ruby命名约定被: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

1 个答案:

答案 0 :(得分:1)

如果SubmittedPackage是JoinTable,我想它应该有很多列表,但我只看到很多包和许多submitted_pa​​ckages。

HTH