親モデルから継承したモデルの数を検証し、一意に保つことを試みています。RoR STI親モデルインスタンスごとに1つずつのタイプ
だから私は
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です。
どのようにして各ユーザーの各タイプの単一存在を検証できますか?
あなたは上の一意性の検証を追加することができます
parents
テーブルの上にtype, user_id
に一意のインデックスを追加@MrYoshijiにより示唆されるようにもvalidates :type, uniqueness: { scope: :user_id }
ユーザモデルを作成し、親との親関係を 'autosave'を使用するようにします(ユーザの検証をトリガします)。 'parents'テーブルの'(type、user_id) 'にユニークなインデックスを作成することを強く推奨します。そうすれば、ある時点でこの一意性を二重チェックするのを忘れたとしても、DBはこのルールを保証します。 – MrYoshiji