I didn't know about acts_as_paranoid. I was thinking a callback on before_destroy.
def before_destroy update_attribute(:active, false) return false end On Fri, May 4, 2012 at 2:19 PM, Chris Herring < [email protected]> wrote: > I would just use something likes acts_as_paranoid and then then have the > dependent destroy conditions on your associations. > > On Friday, 4 May 2012 at 1:55 PM, Dmytrii Nagirniak wrote: > > Hi, > > What is the easiest way to implement *soft-deletes on has_many through* > association? > > What I want is something like this: > > class Company > ActiveRecord::Base > has_many :staffings > has_many :users, through: :staffings, conditions: {staffings: {active: > true}} > end > > I want to use Company#users the following way: > > - the Company#users should be a normal association so that it *works > with forms*. > - when adding a *new user*, a new Staffing with active: true is * > created*. > - when *removing* a user, the existing Staffing is updated active: > false (currently it *just get deleted*). > - when adding a *previously removed user* (so that Staffing#active == > false) the Staffing is updated to active: true. > > I thought about overriding the Company#users= method, but it really isn't > good enough since there are other ways of updating the associations. > > What is the Rails Way of doing this sort of thing? > (I asked it at SO too - > http://stackoverflow.com/questions/10441633/soft-delete-on-has-many-through-association > ) > > What I came up with so far is: > > - override user= and user_ids > - deny the use of any other association modifier methods: > > But all that feels really, really dirty. > > has_many :developments, through: :development_participations, > conditions: {development_participations: {allowed: true}} do |a| > %w{<< delete clear build create}.each do |association_method| > # Disable assoc modifier methods for now > # > http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many > define_method(association_method) do |*args| > raise 'nah, not yet supported. Use `developments=` > instead.' > end > end > end > > def users=(others) > self.development_ids = others.collect &:id > end > > def development_ids=(other_ids) > # All the merging magic here > end > > > Any thought? > > > Cheers, > Dmytrii > http://ApproachE.com > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Ruby or Rails Oceania" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rails-oceania?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "Ruby or Rails Oceania" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rails-oceania?hl=en. > -- Craig Read @Catharz https://github.com/Catharz http://stackoverflow.com/users/158893/catharz -- You received this message because you are subscribed to the Google Groups "Ruby or Rails Oceania" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rails-oceania?hl=en.
