I'm currently building a prototype app, using the latest beta version of Rails 4.2.
For several parts of the system, I need to allow the user to select a "default" item in a list.
So far, I've implemented this as a "default" field on the models, and a uniqueness validation to ensure that there's only one "default" allowed.
One of my business rules is to prevent the deletion of a "default" entity.
I could use a before_destroy callback to do this - and that works fine - but I'm also using the paranoia gem from https://github.com/radar/paranoia to give me soft-delete capabilities. This overrides the destruction of models with an update call (setting a "deleted_at" field instead). Using a before_update call isn't giving me the expected result, as the deleted_at field isn't being set early enough.
If the paranoia gem is going to cause me problems, I'm happy to remove that requirement altogether. Soft deletion is a nice to have, rather than an essential feature at this stage.
Does anyone have any suggestions on how I can implement this logic, and just as importantly test that it works as expected?
You could implement this as a very simple validation that prevents the setting of your
deleted_at
if the model'sdefault
field is set.