2016-05-23 5 views
0

ProductUserモデルにはroleという属性があります。ユーザーはowner(役割)によって削除することができ、productが存在する間、オーナーが自分自身を削除できないようにしたいと考えています。ただし、productが削除された場合、すべてのproduct_usersは所有者を含めて削除する必要があります。rails4依存破壊コールバックエラー

productを削除しようとすると、次のコードでActiveRecord::RecordNotDestroyed - Failed to destroy the recordというエラーが発生します。私はこれがdependent: :destroyのために実行の順序のためだと思います。どうすればこの作品を作れますか?

答えて

2

ユーザーがオーナーである場合、ProductUserレコードの削除ボタンは表示されないと思われましたか?

いずれにしても、依存する破棄ではなく外部キーを使用すると、破棄はデータベースレベルで行われ、問題を解決する製品ユーザーモデルはインスタンス化されません。そして、移行

def change 
    add_foreign_key :product_users, :products, on_delete: :cascade 
end 

でそう

製品に依存した製品が削除されたときに、データベース製品の製品のユーザーを破壊するカスケード削除オプションをオンにしたオプション

class Product < ActiveRecord::Base 
    has_many :product_users 
end 

を破壊取り除きます。

+0

j-dexx、私はそれを表示していないが、すべてがうまく動作することを確認したい。私は外来キーの制約も使用していますが、現時点でカスケードはありません。 Btw。これが最善の解決策ですか?私はレールでのみ、あるいはdb(カスケード)とレールで何かをすることができないのですか?私は通常、存在しなければならない属性が存在していなければならないと言うように、二重保護を行うのが好きです。レール側に 'validate:attribute、presence:true'、db側に' null:false'を実行します。 –

+0

いいえ、あなたは本当に私が考えることはできません。 –

関連する問題