I’m currently using Rails 3 + Devise. I’m soft deleting users by setting a Time.now to User.deleted_at.
This deletes the user. Then in my application_controller, I check to get rid of any soft deleted users.
before_filter :no_deleted_users
def no_deleted_users
if current_user && current_user.deleted_at
flash[:alert] = "Access Denied"
return sign_out_and_redirect('/')
end
end
The problem is that soft deleted users still appear through out my app. I have models like:
User (id, deleted_at)
GroupMember(id,user_id)
Comment(id,user_id)
How can I make it so that soft_deleted users never show up in the app? I tried doing this in User.rb:
default_scope :conditions => ‘users.deleted_at IS NULL’
But that scope took no effect when I did something like group.group_members. Group_members with user_id records that were soft_deleted were still returned.
Suggestions on how to elegantly handle removing soft_deleted users in an app?
Thanks
Your GroupMember record won’t know about the default scope on User. If you specify that a group has many users through group members, then I would expect group.users to return only existing users with your User default scope. For group.group_members to behave as expected, you would need to either delete the record associating the group to the soft deleted user, or maintain a separate default scope in GroupMember, such as (assuming Rails 3):