Originariamente inviato da weppos
http://railscasts.com/episodes/52-up...ugh-checkboxes
Grazie.

find non solleva eccezione in quel caso perché gli passi come parametro un array. Se non ricordo male, se un ID non esiste lui lo ignora. Al contrario di find(id).
No, solleva un'eccezione in ogni caso (almeno su Rails 2.3.2).
Un sistema che m'è venuto in mente su due piedi e che non è proprio eccezionale ma che potrebbe servire come spunto
codice:
def self.destroy_by_ids(s)
  ids = s.split(",")
  transaction { destroy(ids) }
rescue ActiveRecord::RecordNotFound
  return nil
end
Destroy ritorna true o false a seconda che la cancellazione sia andata o meno a buon fine (per vari motivi).
Usando map tu collezioni la sequenza di return e quindi avrai che se un elemento è false, allora quel record non è stato cancellato.
Destoy ritorna l'oggetto freezato nal caso vada a buon fine e nel caso non vada a buon fine non saprei dire, non è documentato, leggendo il codice al volo non l'ho capito e non saprei come farlo fallire...