Skip to main content

ActiveSupport Concerns: Making a Soft Deletable module Discussion

General • Asked by Chris Oliver

You could add :deleted_at field inside included_do, so it's added everywhere you include the concern. Actually not sure if it's possible with ActiveRecord, but with Mongoid for sure.

I don't think you can with ActiveRecord since you need a database migration to add it. That's a great point for MongoDB users though! Super simple.

One of the reasons to work with Mongo :-)


If you want to hit callbacks like after_destroy you can wrap your code in a run_callbacks block like so...

https://gist.github.com/Chr...

see http://apidock.com/rails/Ac...

Ah yes! I'll have to do an episode on that too.


Love unraveling the magic of some of these really useful gems :)


TIL: you did a screencast on one of my gems :D

I did! Thanks for your work on paranoia! :)


Excellent Episode, my friend. Thank you!


Great job! These are really interesting, and elegent. They are kind of software engineering problems. Makes you think! Can you do more like this? :-)

Absolutely! I like trying to show how to use a gem as well as showing how you could build your own version from scratch. It makes using any library a lot less daunting when you know you could go in and fix it yourself if you wanted. :)

Got any suggestions you'd like to see?


I'm building my own soft deletable module, but I would like to set the current_user.id in a deleted_by column, to know which user deleted it. It is bad practice to set the user as a global variable available to the model layer due to thread safety...see thread_mattr_accessor and thread_cattr_accessor and a nice article by BigBinary. I will simply implement a destroy(user_id=0) method. If the user_id is passed through from the controller, it will be saved...otherwise the deleter will be 0 and therefore unknown.


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 22,346+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.