【问题标题】:NameError: uninitialized constant - Un-allowed syntax in ActiveRecord?NameError: uninitialized constant - ActiveRecord 中不允许的语法?
【发布时间】:2012-05-04 23:19:27
【问题描述】:

我有两个要尝试加入的资源 - 通过连接表 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 的有很多关系。这至少让事情变得正常,但是,我仍然不清楚为什么有必要开始。 :submitted_packages 破坏了什么 Rails 或 Ruby 命名约定?

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

【问题讨论】:

  • 你有一个错字:has_many :submitted_packages, :class_name =&gt; 'SubmittedPackage**s**'。你的班级名称是复数,它应该是单数,即SubmittedPackage。 Rails 只是试图找到名为 submitted_packagess 的表并没有找到它(我想,:))。
  • @MarkGuk 正如您在此处看到的那样,它实际上工作得很好。我没有明确定义 :class_name 的顶部版本是问题所在。谢谢你看看!
  • 但是在您原来的问题代码中,您的模型也有错误的名称。
  • 您好,请做一个简单的测试,将您的模型重命名为单数形式(SubmmitedPackage),然后删除 :class_name 并告诉我们结果

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


【解决方案1】:

如果 SubmittedPackage 是 JoinTable,我想它应该有很多列表,但我看到的只是很多包和很多提交的包。

HTH

【讨论】:

  • 好收获。出于某种原因,我完全搞砸了连接表的内容......上面已经进行了更正,以及解决方法修复。原来的问题仍然无法解释!
猜你喜欢
  • 2015-05-07
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多