overriding active record methods

Hi,

   My application is running fine but now I had an requirement like when somebody tries to delete the record from database using delete or delete_all I should not delete the record rather I should set the delete flag to 1. There are many model objects and there are many places I am using delete and delete_all method. I dont want to touch all the places rather I want to override the delete method of ActiveRecord::Base and also when application tries to get the records from database it should get only records those the delete flag set to 0. For this I have to override the base find method too. But I dont know how to override and where to override, and I dont want to add the overridden delete method in all the model objects at the same time. Please suggest the best solution for this. I am almost struck with this. please please help me on this....

Thanks, Ramu.

anyone knows about this??

Have a look at acts_as_paranoid

Colin

Maybe you could find some plugins, but i could not remember which plugin could do this. sorry

If you've used Model.find(:all, ....) you're probably going to be a little stuck [1] , but if you've used Model.all, you can override this as a custom named scope in your model.

named_scope :all, :conditions => "model_table.deleted_flag = false"

Alternatively, maybe "default_scope :conditions => { :deleted_flag => false } " would be better for you. But you'd need to be aware of using "with_exclusive_scope" if you want to chain scopes and return the deleted records too.

[1] You can do something along the lines of http://www.freezzo.com/2008/05/14/override-default-find-conditions-for-model/, but that makes it difficult to do a real "find all" - you'd probably have to alias the original method to a new name and remember to use it - not really conventional...