Jak usunąć obiekt ActiveRecord?
Jak usunąć obiekt ActiveRecord?
Spojrzałem na Active Record Querying i nie ma nic na kasowanie, że mogę zobaczyć.
Usunąć
id
,Usuń bieżący obiekt jak:
user.remove
,Czy można usunąć na podstawie klauzuli
where
?
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
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
.
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
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ą.
User.destroy
,User.delete
User.destroy_all(<conditions>)
lubUser.delete_all(<conditions>)
Notice : User jest klasą, A user jest obiektem instancji
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
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