Можно сделать вот как: нужно, чтобы из Company можно было получить список ролей для нее. Например, в Role добавьте референс на Company, а в Company has_many :roles.
Еще в Role нужна колонка с видом роли - админ, секретарь, директор. Что-нибудь в виде admin, secretary, director. Пусть колонка будет role.
Затем распишите abilities примерно так:
Companies.each do |company|
role = company.roles.where(user: user).first
can role.role.to_sym, company, id: company.id if role.present?
end
И проверяем где нужно:
if can? :admin, @company
# do smth
end
Поэкспериментируйте, должно сработать по документации.
Кстати, можно has_many through заменить на has_and_belongs_to_many, если в связующей таблице только id обеих таблиц и нет других данных.