`has_and_belongs_to_many` associations should be avoided where possible as they likely to disappear from ActiveRecord before too long. A `has_many :through` association with a proper join model will almost always be a better bet. e.g.

```
has_many :role_supersedings
has_many :superseding_roles, through: :role_supersedings, foreign_key: :superseded_role_id, association_foreign_key: :superseding_role_id
has_many :superseded_roles, through: :role_supersedings, foreign_key: :superseding_role_id, association_foreign_key: :superseded_role_id
```