所以我目前在一个应用中:
class Post < ApplicationRecord
belongs_to :category
end
和
class Category < ApplicationRecord
has_many :posts
end
可以正常工作。但是,我需要在帖子中添加多个类别。我曾考虑过对每个人使用has_many_and_belongs_to来获取此信息,但在实现此功能时会遇到一些麻烦。似乎需要添加联接表?如果是这样,上面显示的设置将如何?
有什么想法吗?
我非常感谢您的投入!预先感谢!
答案 0 :(得分:2)
该表应命名为categories_posts
(categories
由于字母顺序而排在最前面),并且包含post_id
和category_id
整数列(最有可能是索引的)。就像这样简单:
class Post < ApplicationRecord
has_and_belongs_to_many :categories
end
class Category < ApplicationRecord
has_and_belongs_to_many :posts
end
您可以使用以下方法创建添加迁移的联接表:
rails g migration CreateJoinTableCategoryPost category post
答案 1 :(得分:1)
或者,您可以使用has_many :through
来更好地控制联接表。
对多对多关系使用:through
的优势
has_many :through
关系,您可以拥有一个模型,该模型将允许您添加验证和回调。has_and_belongs_to_many
来限制表的关联信息示例
class Post < ApplicationRecord
has_many :categories, through: :post_categories
has_many :post_categories
end
class Category < ApplicationRecord
has_many :posts, through: :post_categories
has_many :post_categories
end
使用rails generator命令添加关系模型
rails g model post_category category_id:integer post_id:integer custom:text
class PostCategory < ApplicationRecord
belongs_to :category
belongs_to :post
end