Если у вас есть права в профиле и хранилище для вашего файла powers.rb, то вы также можете просто авторизовать родителя.Т.е. что-то вроде этого:
load_and_authorize_resource :profile
load_and_authorize_resource :store
load_and_authorize_resource :order
Или вы можете сделать так, как описано в CanCan wiki:
Полиморфные ассоциации
Допустим, задачи могут либобыть назначенным на Проект или Событие через полиморфную ассоциацию.Массив может быть передан в параметр: through, и он будет использовать первый найденный файл.
load_resource :project
load_resource :event
load_and_authorize_resource :task, :through => [:project, :event]
Здесь он будет проверять переменные @project и @event и извлекать задачу через любую существующую.Обратите внимание, что это только загрузка родительской модели, если вы хотите авторизовать родительский объект, вам нужно будет сделать это через before_filter, потому что здесь задействована специальная логика.
before_filter :authorize_parent
private
def authorize_parent
authorize! :read, (@event || @project)
end