每个父模型实例的每种类型的 RoR STI 单一

RoR STI Single of each type for every parent model instance

我正在尝试验证从父模型继承的模型的数量并保持它们的唯一性。

所以我有

User has_many :parents
Parent belongs_to :user

此外,我为此使用了单一 table 继承,因此:

rails g model Type1Parent --parent=Parent

总的来说我有 3 种类型,所以 Type1Parent,Type2Parent,Type3Parent。

每个用户必须每种类型只有一个,例如

type1parent = user.type1parents.new
type1parent.save #=> OK!

但如果我再试一次

type1parent = user.type1parents.new 
type1parent.save #=> Error: User already has a type1parents

而且还能够为同一用户创建 type2parent

那么,我如何为每个用户验证每种类型的单一存在?

将此作用域唯一性验证添加到您的父模型:

validates :type, uniqueness: { scope: :user_id }

也按照@MrYoshiji 的建议,在 parents table

type, user_id 上添加唯一索引