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

时间:2017-12-08 14:09:34

标签: ruby-on-rails validation single-table-inheritance

我试图验证从Parent模型继承并保持其唯一的模型数。

所以我有

User has_many :parents
Parent belongs_to :user

此外,我还使用单表继承,所以:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

同样正如@MrYoshiji所建议的那样,在type, user_id表格上parents添加唯一索引