Bir ActiveRecord nesnesini nasıl silebilirsiniz?
Aktif Kayıt Sorgusu'na baktım ve silebildiğim bir şey yok.
Tarafından sil
id
,Geçerli nesneyi gibi sil:
user.remove
,Bir
where
maddeye göre silebilir misiniz ?
Bir ActiveRecord nesnesini nasıl silebilirsiniz?
Aktif Kayıt Sorgusu'na baktım ve silebildiğim bir şey yok.
Tarafından sil id
,
Geçerli nesneyi gibi sil: user.remove
,
Bir where
maddeye göre silebilir misiniz ?
Yanıtlar:
Bu destroy
ve destroy_all
yöntemler,
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Alternatif kullanabilir delete
ve delete_all
hangi zorlamak olmaz :before_destroy
ve :after_destroy
geri aramalar veya herhangi bağımlı dernek seçenekleri.
User.delete_all(condition: 'value')
birincil anahtar olmadan kayıtları silmenize olanak tanır
Not : @ hammady'nin yorumundan, user.destroy
Kullanıcı modelinde birincil anahtar yoksa çalışmaz.
Not 2 : Rails 5.1'de @ pavel-chuchuva'nın yorumundan, destroy_all
koşullarla ve delete_all
koşullarla birlikte yorumu kaldırıldı - bkz. Guides.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
, yok edilecek veya silinecek kaydı belirlemek için de iyidir.
Orada delete
, delete_all
, destroy
, ve destroy_all
.
Belgeler şunlardır: eski belgeler ve Rails 3.0.0 belgeleri
delete
nesneleri somutlaştırmaz, oysa destroy
. Genel olarak, delete
daha hızlıdır destroy
.
delete
daha hızlıdır ancak modelde tanımlamış olabileceğiniz geri aramaları atlar
User.destroy
User.destroy(1)
ile kullanıcı silecektir id == 1
ve :before_destroy
ve :after_destroy
geri aramaları oluşur. Örneğin, ilişkili kayıtlarınız varsa
has_many :addresses, :dependent => :destroy
Kullanıcı yok edildikten sonra adresleri de yok edilecektir. Bunun yerine silme eylemini kullanırsanız geri aramalar gerçekleşmez.
User.destroy
, User.delete
User.destroy_all(<conditions>)
veya User.delete_all(<conditions>)
Uyarı : Kullanıcı bir sınıf ve kullanıcı bir örnek nesnedir
User.destroy_all()
geri çağrıları çalıştırır, bu nedenle herhangi bir şeyi silmeden önce kayıtları yükler. Bir değil iki SQL ifadesi. Performansın yanı sıra, bunun da eşzamanlılık etkileri vardır. Daha güvenli arama geri aramaları atlar; User.delete_all()
sadece tek bir DELETE FROM...
komut verecektir .