【发布时间】: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_packages 是否与 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 => 'SubmittedPackage**s**'。你的班级名称是复数,它应该是单数,即SubmittedPackage。 Rails 只是试图找到名为submitted_packagess的表并没有找到它(我想,:))。 -
@MarkGuk 正如您在此处看到的那样,它实际上工作得很好。我没有明确定义 :class_name 的顶部版本是问题所在。谢谢你看看!
-
但是在您原来的问题代码中,您的模型也有错误的名称。
-
您好,请做一个简单的测试,将您的模型重命名为单数形式(SubmmitedPackage),然后删除 :class_name 并告诉我们结果
标签: ruby ruby-on-rails-3 activerecord