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.destroyUser.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...コマンドのみを発行します。