Os métodos dinâmicos de pesquisa do ActiveRecord receberam uma versão destrutiva, que dispara um erro do tipo RecordNotFound caso nenhum registro seja encontrado, ao invés de apenas retornar nil como acontece com a versão original.
Para usar esta versão destrutiva, basta adicionar o sinal de exclamação no final do método. Veja um exemplo:
Topic.find_by_title!("The First Topic!")
# => ActiveRecord::RecordNotFound
Esta alteração é muito bem vinda.
Este artigo pertence a série “Edge Rails”. Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.2 ou superior. A intenção desta série é preparar antecipadamente os programadores para as próximas versões do framework.
Só um detalhe, Carlos: como não há nada sendo destruído, esses métodos não podem ser realmente chamados de destrutivos. Essa denominação até assusta, a primeira impressão que tive ao ver o título da notícia era de que seriam métodos que retornariam registros ao mesmo tempo que os apagariam do banco, algo mais ou menos como o Array#delete_at.
Daniel,
Tem razão, mas é assim mesmo que chamam estes métodos com o sinal de exclamação no fim. No caso, o é destrutivo porque dispara um erro ao invés de um simples nil como na forma convencional. Concordo que assusta um pouco mesmo, mas não fui eu quem inventou o nome… rs ;)
O próprio método save tem sua versão destrutiva (save!) que também faz a mesma coisa.