Как удалить объект ActiveRecord?
Я посмотрел на Active Record Querying, и у меня нет ничего при удалении, что я вижу.
Удалить
id
,Удалить текущий объект как:
user.remove
,Вы можете удалить, основываясь на
where
предложении?
источник
Как удалить объект 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
будет работать, если у модели User нет первичного ключа.
Примечание 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
произойдет обратный вызов. Например, если у вас есть связанные записиПосле уничтожения пользователя его адреса также будут уничтожены. Если вместо этого вы используете действие удаления, обратных вызовов не будет.
User.destroy
,User.delete
User.destroy_all(<conditions>)
илиUser.delete_all(<conditions>)
Примечание . Пользователь - это класс, а пользователь - объект экземпляра.
источник
User.destroy_all()
запускает обратные вызовы, поэтому, прежде чем что-либо удалить, загружает записи. Это два оператора SQL, а не один. Помимо влияния на производительность, это также влияет на параллелизм. Более безопасный вызов пропускает обратные вызовы;User.delete_all()
выдаст только однуDELETE FROM...
команду.