ActiveRecordオブジェクトをどのように削除しますか?
私は Active Record Querying を見ました、そしてそれが私が見ることができる削除に関して何も持っていません。
id
による削除
user.remove
のように現在のオブジェクトを削除します。
where
句に基づいて削除できますか?
これはdestroy
メソッドとdestroy_all
メソッドです。
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
あるいは、delete
およびdelete_all
を使用することもできます。これらは、:before_destroy
および:after_destroy
のコールバック、または依存する関連付けオプションを強制しません。
User.delete_all(condition: 'value')
は主キーなしでレコードを削除することを可能にします
注:@ hammadyのコメントから、user.destroy
はユーザーモデルに主キーがないと動作しません。
注2:@ pavel-chuchuvaのコメントから、Rails 5.1では条件付きのdestroy_all
および条件付きのdelete_all
は非推奨になりました - guides.rubyonrails.org/5_1_release_notesを参照してください。 .html
delete
、delete_all
、destroy
、およびdestroy_all
があります。
ドキュメントは以下のとおりです。 古いドキュメント および Rails 3.0.0ドキュメント
delete
はオブジェクトをインスタンス化しませんが、destroy
はインスタンス化しません。一般的に、delete
はdestroy
より速いです。
User.destroy
User.destroy(1)
はid == 1
を持つユーザーを削除し、:before_destroy
および:after_destroy
コールバックが発生します。たとえば、レコードを関連付けたとします。
has_many :addresses, :dependent => :destroy
ユーザーが破壊された後、彼のアドレスも破壊されます。代わりに削除アクションを使用した場合、コールバックは発生しません。
User.destroy
、User.delete
User.destroy_all(<conditions>)
またはUser.delete_all(<conditions>)
通知:ユーザーはクラス、ユーザーはインスタンスオブジェクトです