私はテーブルからレコードを削除する最良の方法を探しています。たとえば、ユーザーIDが多数の表にまたがるユーザーがあります。このユーザーと、すべてのテーブルでIDを持つすべてのレコードを削除します。delete_allとdestroy_all?
u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete
これは動作し、すべてのテーブルからユーザーのすべての参照を削除しますが、私はdestroy_all
は非常にプロセス重かったことを聞いたので、私はdelete_all
を試してみました。自分のユーザーテーブルからユーザーを削除するだけで、他のすべてのテーブルのid
はnullになりますが、レコードはそのまま残ります。このようなタスクを実行するために正しいプロセスが何かを共有することはできますか?
私は、destroy_all
がすべての関連オブジェクトでdestroy
関数を呼び出していることを確認していますが、正しいアプローチを確認したいだけです。
また、1)コールバックは 'delete_all'を使用してもコールされず、2)' destroy_all'はすべてのレコードをインスタンス化し、一度に1つずつ破棄するので、非常に大きなデータセットでは痛いほど遅くなる。 –
モデルでbefore_destroyメソッドを実行しているとします。もしdelete_allを使用すると、このメソッドは実行されません。第二に、私は私のモデルでbefore_deleteメソッドを使用する場合、これはレールのコンソールでdeleteまたはdelete_allを実行すると実行されますか? – BKSpurgeon