ActiveRecordオブジェクトをどのように削除しますか?
私が見アクティブレコードクエリと、それは私が見ることができるの削除には何もありません。
によって削除
id
、次のように現在のオブジェクトを削除します:
user.remove
、where
条項に基づいて削除できますか?
ActiveRecordオブジェクトをどのように削除しますか?
私が見アクティブレコードクエリと、それは私が見ることができるの削除には何もありません。
によって削除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のコメントからdestroy_all
、条件付きおよびdelete_all
条件付きはRails 5.1で非推奨になりました-guides.rubyonrails.org/5_1_release_notes.htmlを参照してください
User.find_by(username:"bob")
は、破棄または削除するレコードを特定するのにも適しています。
ありdelete
、delete_all
、destroy
、とdestroy_all
。
ドキュメントは次のとおりです。古いドキュメントとRails 3.0.0のドキュメント
delete
オブジェクトをインスタンス化しませんが、インスタンス化しますdestroy
。一般に、delete
よりも高速ですdestroy
。
delete
より高速ですが、モデルで定義したコールバックをバイパスします
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>)
注意:ユーザーはクラスであり、ユーザーはインスタンスオブジェクトです
User.destroy_all()
注意:コールバックを実行するため、何かを削除する前に、レコードをロードします。1つではなく2つのSQLステートメントです。パフォーマンスへの影響とは別に、これには同時実行性への影響もあります。安全な呼び出しはコールバックをスキップします。User.delete_all()
単一のDELETE FROM...
コマンドのみを発行します。