Как удалить объект ActiveRecord? - PullRequest
301 голосов
/ 14 ноября 2010

Как удалить объект ActiveRecord?

Я посмотрел на Запрос активной записи , и при удалении ничего не видно, что я вижу.

  1. Удалить по id,

  2. Удалить текущий объект, например: user.remove,

  3. Можно ли удалить на основе предложения where?

Ответы [ 3 ]

540 голосов
/ 14 ноября 2010

Это 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

60 голосов
/ 14 ноября 2010

Существует delete, delete_all, destroy и destroy_all.

Документы: старые документы и Rails 3.0.0 документы

delete не создает экземпляры объектов, в то время как destroy делает. В общем, delete быстрее, чем destroy.

45 голосов
/ 14 ноября 2010
  1. 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>)

Уведомление : Пользователь - это класс, а пользователь - объект экземпляра

...