has_and_belongs_to_many refactor