Railsアプリケーションでは、私はマイグレーションとは別に、それらをすべて手動で設定したMySQLで外部キー制約を持っています。ON DELETE CASCADE、:dependent =>:destroy、またはその両方を使用する必要がありますか?
ActiveRecordの:dependent => :destroy
オプションを使用するかどうかを判断しようとしています。例えば、私のスキーマに、私はテーブルを持っている...
users
-----
log_entries
-----------
user_id # Has FK constraint to users.id with ON DELETE CASCADE
そして、私のモデルに私が...
class User < ActiveRecord::Base
has_many :log_entries, :dependent => :destroy
end
は、私がモデルに依存してオプションを省略すると、ちょうどそれを残すべきかもしれませんDBまで?それともそれを持っているのがいいですか?このアプリケーションでは、削除するときにコールバックを実行する必要はありません。すべての場合、単に削除するだけで問題ありません。
考慮すべきもう1つの要因は、おそらくrake db:test:prepare
がそれらを設定していないため、FK制約がテスト環境に存在しないということです。だから、MySQLに完全に依存して削除をカスケードするのであれば、何が起こるかをテストするのは難しいです。
なぜあなたはそれを信じられませんか? Model.to_jsonを使用するべきだと言っているように、それは将来破らないことを保証しないからです。 –
依存関係の別の層があり、フックがトップダウンを削除することを決定した場合、レコードが期待できないときにレコードが消えるとnilの呼び出しメソッドが呼び出される可能性があります。 –
あなたのデータベースには、レールアプリではなくデータを管理させるのが理にかなっています。削除カスケード時の使用法の保護。 schema_formatを次のように設定するべきではありません:sqlは、テストデータベースの問題でカスケードが存在しないことを修正しますか? –