web-dev-qa-db-ja.com

ActiveRecordオブジェクトをどこのように削除しますか?

ActiveRecordオブジェクトをどのように削除しますか?

私は Active Record Querying を見ました、そしてそれが私が見ることができる削除に関して何も持っていません。

  1. idによる削除

  2. user.removeのように現在のオブジェクトを削除します。

  3. where句に基づいて削除できますか?

299
Blankman

これは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

535
Marek Sapota

deletedelete_alldestroy、およびdestroy_allがあります。

ドキュメントは以下のとおりです。 古いドキュメント および Rails 3.0.0ドキュメント

deleteはオブジェクトをインスタンス化しませんが、destroyはインスタンス化しません。一般的に、deletedestroyより速いです。

59
  1. User.destroy

User.destroy(1)id == 1を持つユーザーを削除し、:before_destroyおよび:after_destroyコールバックが発生します。たとえば、レコードを関連付けたとします。

has_many :addresses, :dependent => :destroy

ユーザーが破壊された後、彼のアドレスも破壊されます。代わりに削除アクションを使用した場合、コールバックは発生しません。

  1. User.destroyUser.delete

  2. User.destroy_all(<conditions>)またはUser.delete_all(<conditions>)

通知:ユーザーはクラス、ユーザーはインスタンスオブジェクトです

45