Jak usunąć obiekt ActiveRecord?
Spojrzałem na Active Record Querying i nie ma nic do usunięcia, co widzę.
Usuń przez
id,Usuń bieżący obiekt jak:
user.remove,Czy możesz usunąć na podstawie
whereklauzuli?
Jak usunąć obiekt ActiveRecord?
Spojrzałem na Active Record Querying i nie ma nic do usunięcia, co widzę.
Usuń przez id,
Usuń bieżący obiekt jak: user.remove,
Czy możesz usunąć na podstawie whereklauzuli?
Odpowiedzi:
To destroyi destroy_allmetody
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Alternatywnie można użyć deletei delete_allktóry nie będzie egzekwować :before_destroyi :after_destroyzwrotnych ani żadnych opcji zależnych stowarzyszeniu.
User.delete_all(condition: 'value')pozwoli ci usunąć rekordy bez klucza podstawowego
Uwaga : z komentarza @ hammady user.destroynie będzie działać, jeśli model użytkownika nie ma klucza podstawowego.
Uwaga 2 : Z komentarza @ pavel-chuchuva, destroy_allwarunki i delete_allwarunki zostały wycofane w Rails 5.1 - patrz guide.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob") jest dobre do identyfikacji rekordu zniszczyć lub usunąć, zbyt.
Jest delete, delete_all, destroy, i destroy_all.
Dokumenty to: starsze dokumenty i dokumenty Rails 3.0.0
deletenie tworzy obiektów, podczas gdy destroyrobi. Ogólnie rzecz biorąc, deletejest szybszy niż destroy.
deletejest szybszy, ale omija wywołania zwrotne, które mogłeś zdefiniować w modelu
User.destroyUser.destroy(1)usunie użytkownikowi id == 1i :before_destroyi :after_destroywystąpić wywołania zwrotne. 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 usuwania, wywołania zwrotne nie wystąpią.
User.destroy, User.delete
User.destroy_all(<conditions>) lub User.delete_all(<conditions>)
Uwaga : Użytkownik jest klasą, a użytkownik jest obiektem instancji
User.destroy_all()uruchamia wywołania zwrotne, więc zanim cokolwiek usunie, ładuje rekordy. To dwie instrukcje SQL, a nie jedna. Oprócz wpływu na wydajność ma to również wpływ na współbieżność. Bezpieczniejsze połączenie pomija połączenia zwrotne; User.delete_all()wyda tylko jedno DELETE FROM...polecenie.