I did some reading on how to do this and on default_scope. I did find that default_scope isn't recommended in most cases, however we really don't want to see these messages anywhere in the application as the user should not have access to them. We only allow these conversations because we don't want to lose data. I used .unscoped only once where the messages for these conversations are created.

The code could be rewritten not to use default_scope, however that would require all other scopes and **every** find_by etc. to include a where on hidden: false.