Як видалити об’єкт 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()запускає зворотні дзвінки, тому перед тим, як що-небудь видалити, він завантажує записи. Це два заяви SQL, а не один. Крім наслідків для продуктивності, це має і наслідки одночасності. Більш безпечний виклик пропускає зворотні дзвінки; User.delete_all()видасть лише одну DELETE FROM...команду.