Como você exclui um objeto ActiveRecord?
Eu olhei para o Active Record Querying e ele não tem nada a excluir que eu possa ver.
Excluir por
id
,Excluir o objeto atual como:
user.remove
,Você pode excluir com base em uma
where
cláusula?
Como você exclui um objeto ActiveRecord?
Eu olhei para o Active Record Querying e ele não tem nada a excluir que eu possa ver.
Excluir por id
,
Excluir o objeto atual como: user.remove
,
Você pode excluir com base em uma where
cláusula?
Respostas:
É destroy
e destroy_all
métodos, como
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Como alternativa, você pode usar delete
e delete_all
que não aplicará :before_destroy
e :after_destroy
retornos de chamada ou qualquer opção de associação dependente.
User.delete_all(condition: 'value')
permitirá excluir registros sem uma chave primária
Nota : do comentário de @ hammady, user.destroy
não funcionará se o modelo do usuário não tiver uma chave primária.
Nota 2 : a partir do comentário de @ pavel-chuchuva, as destroy_all
condições e delete_all
condições foram descontinuadas no Rails 5.1 - veja guias.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
é bom para identificar o registro para destruir ou excluir também.
Há delete
, delete_all
, destroy
, e destroy_all
.
Os documentos são: documentos antigos e documentos do Rails 3.0.0
delete
não instancia os objetos, enquanto destroy
faz. Em geral, delete
é mais rápido que destroy
.
delete
é mais rápido, mas ignora as chamadas de retorno que você pode ter definidos no modelo
User.destroy
User.destroy(1)
excluirá o usuário com id == 1
e :before_destroy
e :after_destroy
retornos de chamada. Por exemplo, se você possui registros associados
has_many :addresses, :dependent => :destroy
Depois que o usuário é destruído, seus endereços também serão destruídos. Se você usar a ação de exclusão, os retornos de chamada não ocorrerão.
User.destroy
, User.delete
User.destroy_all(<conditions>)
ou User.delete_all(<conditions>)
Aviso : Usuário é uma classe e usuário é um objeto de instância
User.destroy_all()
executa retornos de chamada; portanto, antes de excluir qualquer coisa, carrega registros. São duas instruções SQL e não uma. Além das implicações de desempenho, isso também tem implicações de simultaneidade. A chamada mais segura ignora retornos de chamada; User.delete_all()
emitirá apenas um único DELETE FROM...
comando.