我有一个用户模型:
has_one :feed
Feed模式:
belongs_to :user
has_many :feeds_posts
has_many :posts, :through => :feeds_posts
帖子模型:
belongs_to :user
has_many :feeds_posts
has_many :feeds, :through => :feeds_posts
和feeds_posts模型:
belongs_to :feed
belongs_to :post
然而,当我尝试在控制台中运行以下代码时,我得到以下失败(在为用户提供该用户的订阅源之后)。
user.feed.posts
2.1.1 :004 > user.feed.posts
NameError: uninitialized constant Feed::FeedsPost
我做错了什么?
答案 0 :(得分:0)
您错误地命名模型;您的FeedsPosts
模型必须被称为FeedsPost
,可能应该被称为FeedPost
。它是单数的东西,而不是东西的集合,Rails依赖于这个约定。
Rails依赖于某些约定来自动连接关联。您的has_many
仅向Rails提供了这么多信息:feeds_posts
。没有任何东西可以将它与实际模型联系起来,所以Rails必须猜测。它通过假设您遵循根深蒂固的约定来实现这一点,在这种情况下,关联应该是复数(" feed_posts")并且模型应该是单数的(" FeedPost") 。由于您已将模型命名为FeedsPosts
,因此Rails猜错了,并尝试访问一个名为FeedsPost
的类,该类并不存在。
您可以偏离此约定并继续使用您当前的名称,但您必须手动指定关联模型的名称:
has_many :feeds_posts, class_name: 'FeedsPosts'
请注意,这是错误的解决方案 - 不要放弃Rails'命名约定,除非你真的有充分的理由这样做。