2017-12-08 9 views
0

親モデルから継承したモデルの数を検証し、一意に保つことを試みています。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です。

どのようにして各ユーザーの各タイプの単一存在を検証できますか?

+1

あなたは上の一意性の検証を追加することができますparentsテーブルの上にtype, user_idに一意のインデックスを追加@MrYoshijiにより示唆されるようにもvalidates :type, uniqueness: { scope: :user_id }

ユーザモデルを作成し、親との親関係を 'autosave'を使用するようにします(ユーザの検証をトリガします)。 'parents'テーブルの'(type、user_id) 'にユニークなインデックスを作成することを強く推奨します。そうすれば、ある時点でこの一意性を二重チェックするのを忘れたとしても、DBはこのルールを保証します。 – MrYoshiji

答えて

1

これはあなたの親のモデルに一意性の検証をスコープの追加:

+0

はすごくうまくいきます、ありがとう:)、あなたは多分@MrYoshijiが言及した部分で精巧にできましたか? – frcake

関連する問題