ActiveRecord:定义多对多关系时取消初始化常量异常

时间:2017-07-22 05:16:09

标签: ruby-on-rails activerecord many-to-many

我有一个名为Post的模型和一个名为Category的模型。 PostCategory之间的关系是多对多的。所以我创建了一个连接表,如下所示:

create_table :categories_posts do |t|
  t.integer :post_id, index: true
  t.integer :category_id, index: true

  t.timestamps
end

以下是我的模型Post(文件名:post.rb

class Post < ApplicationRecord
  has_many :categories, :through => :categories_posts
  has_many :categories_posts
end

以下是我的模型CategoryPost(文件名:category_post.rb

class CategoryPost < ApplicationRecord
  self.table_name = "categories_posts"
  belongs_to :post
  belongs_to :category
end

但是当我尝试:Post.last.categoriesPost.last.categories_posts时,我遇到异常:

  

NameError:未初始化的常量Post :: CategoriesPost

请告诉我错在哪里。

由于

1 个答案:

答案 0 :(得分:3)

  

NameError:未初始化的常量Post :: CategoriesPost

CategoryPost复数形式为CategoryPosts,因此在定义关联时应使用category_posts代替categories_posts

class Post < ApplicationRecord
  has_many :category_posts
  has_many :categories, :through => :category_posts
end

但是,如果您想使用categories_posts,则可以通过在关联上定义class_name来实现

class Post < ApplicationRecord
  has_many :categories_posts, class_name: "CategoryPost"
  has_many :categories, :through => :categories_posts
end