我有一个 has_many :through 两个表(帖子和类别)之间的关联设置。我使用 has_many :through 而不是 HABTM 的原因是我想对连接表(PostCategory)进行一些验证。
所以我在这里使用了 4 个模型:
用户:
has_many :posts
has_many :categories
邮政:
belongs_to :user
has_many :post_categories
has_many :categories, :through => :post_categories
类别:
belongs_to :user
has_many :post_categories
has_many :posts, :through => :post_categories
帖子类别:
belongs_to :post
belongs_to :category
基本上我想要的是:用户可以创建帖子,用户也可以创建自己的类别。然后,用户可以对帖子进行分类(不仅仅是他们的帖子,任何帖子)。一个帖子可以被许多不同的用户分类(可能以不同的方式),一个类别可以包含许多不同的帖子(一个用户可以将 N 个帖子归类到他们的特定类别下)。
这对我来说有点棘手(我是 Rails 菜鸟)。 对于给定用户,帖子只能属于一个类别。也就是说,对于任何用户来说,一个帖子不能属于一个以上的类别。
我想要做的是为此创建一个验证。我一直无法弄清楚如何。我已经尝试过(在 PostCategory 内)
validates_uniqueness_of :post_id, :scope => :category_id
但我意识到这是不正确的。这只会确保帖子属于 1 个类别,这意味着在一个用户对帖子进行分类后,其他用户就不能这样做了。
我真正要寻找的是如何在我的 PostCategory 模型(或其他任何地方)中验证这一点。我也不反对更改我的数据库架构,如果这会使事情变得更容易(我只是觉得这个架构非常简单)。
有任何想法吗?