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
wheremaddeye 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 wheremaddeye göre silebilir misiniz ?
Yanıtlar:
Bu destroyve destroy_allyöntemler,
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Alternatif kullanabilir deleteve delete_allhangi zorlamak olmaz :before_destroyve :after_destroygeri 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.destroyKullanıcı modelinde birincil anahtar yoksa çalışmaz.
Not 2 : Rails 5.1'de @ pavel-chuchuva'nın yorumundan, destroy_allkoşullarla ve delete_allkoş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
deletenesneleri somutlaştırmaz, oysa destroy. Genel olarak, deletedaha hızlıdır destroy.
deletedaha hızlıdır ancak modelde tanımlamış olabileceğiniz geri aramaları atlar
User.destroyUser.destroy(1)ile kullanıcı silecektir id == 1ve :before_destroyve :after_destroygeri 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 .