我有一个名为Post
的模型和一个名为Category
的模型。 Post
和Category
之间的关系是多对多的。所以我创建了一个连接表,如下所示:
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.categories
或Post.last.categories_posts
时,我遇到异常:
NameError:未初始化的常量Post :: CategoriesPost
请告诉我错在哪里。
由于
答案 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