Although I haven't looked into it much, I doubt this would be easy to do because ActiveRecord goes through many different methods for destroying/editing/creating models. For example, you can call 'destroy' on a specific instance of a model to destroy it. Or you can call 'destroy' on the model's class and pass an id of the model you want to destroy. Or you can call destroy_all. There's also "delete" variations. Don't forget the :dependent option in the association definition.
Looking at the source, it appears many of these use the instance level 'destroy' method or the 'delete_all' method, but I don't know if it's the same for all cases. Probably the simplest thing to do is override before_destroy callback and raise an exception. You can do the same for the delete_all method since that bypasses the callback.
In short though, I think it is best to leave this in the hands of the developer and just provide good documentation on what should not be done. Nothing's going to stop them from executing a query directly on the database for example.
- Free Ruby on Rails Screencasts