protective protects active records from being destroyed in a declarative way: < protect_if :attachments, "Record has attachments and cannot be destroyed" > . Of course, you may pass the name of any defined method. If its result evaluates to present?, the record is not going to be destroyed. No exception is thrown, but a message is added to the errors object of your model. This may then be used further on.