每个父模型实例的每种类型的 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
上添加唯一索引
我正在尝试验证从父模型继承的模型的数量并保持它们的唯一性。
所以我有
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
上添加唯一索引