New Discussion

Notifications

You’re not receiving notifications from this thread.

ActiveSupport Concerns: Making a Soft Deletable module Discussion

12
General

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.

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.

Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 88,834+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.