Jak usunąć obiekt ActiveRecord?

Jak usunąć obiekt ActiveRecord?

Spojrzałem na Active Record Querying i nie ma nic na kasowanie, że mogę zobaczyć.

  1. Usunąć id,

  2. Usuń bieżący obiekt jak: user.remove,

  3. Czy można usunąć na podstawie klauzuli where?

Author: user2262149, 2010-11-14

4 answers

To destroy i destroy_all metody, jak

user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)

Alternatywnie możesz użyć delete i delete_all, które nie wymuszają wywołań zwrotnych :before_destroy i :after_destroy ani żadnych zależnych opcji asocjacji.

User.delete_all(condition: 'value') pozwoli na usuwanie rekordów bez klucza podstawowego

Uwaga: Z komentarza @ hammady, user.destroy nie zadziała, jeśli model użytkownika nie ma klucza głównego.

Uwaga 2: Z komentarza @ pavel-chuchuva, destroy_all z warunkami i delete_all z warunki zostały wycofane w Rails 5.1-zobacz guides.rubyonrails.org/5_1_release_notes.html

 598
Author: Marek Sapota,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-05 10:29:53

Jest delete, delete_all, destroy, i destroy_all.

Dokumenty to: starsze dokumenty oraz Rails 3.0.0 dokumenty

delete nie tworzy instancji obiektów, podczas gdy destroy robi. Ogólnie rzecz biorąc, delete jest szybszy niż destroy.

 62
Author: nonopolarity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
  1. User.destroy

User.destroy(1) usunie użytkownika za pomocą wywołań zwrotnych id == 1 i :before_destroy oraz :after_destroy. Na przykład, jeśli masz powiązane rekordy

has_many :addresses, :dependent => :destroy

Po zniszczeniu Użytkownika jego adresy również zostaną zniszczone. Jeśli zamiast tego użyjesz akcji delete, wywołania zwrotne nie wystąpią.

  1. User.destroy, User.delete

  2. User.destroy_all(<conditions>) lub User.delete_all(<conditions>)

Notice : User jest klasą, A user jest obiektem instancji

 49
Author: Tadas T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 07:29:09

Jeśli używasz Rails 5 i nowszych, poniższe rozwiązanie zadziała.

#delete based on id
user_id = 50
User.find(id: user_id).delete_all

#delete based on condition
threshold_age = 20
User.where(age: threshold_age).delete_all

Https://www.rubydoc.info/docs/rails/ActiveRecord%2FNullRelation:delete_all

 0
Author: Dhivya Dandapani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-25 09:21:53