, если 2 варианта значительно отличаются и должны вызываться с одного и того же контроллера, вы можете использовать around_filter и отправить имя controller.action_name одному из 2 классов, которые наследуются от одной базы. *
если 2 варианта не настолько различны, что требуют разветвления, если все будет хорошо ...
для диспетчеризации, это может быть просто универсальный класс, который наследуется от базового класса. в вашем фильтре может быть переключатель, который создает правильный объект на основе роли, а затем, наконец, отправляет («# {action}») объект. я сделал бы это только в том случае, если вариации настолько различны, что они заслуживают двух производных классов.
теперь, кроме общих классов, вы также можете использовать удобный Components w / метод render_component. в большинстве случаев накладные расходы на диспетчеризацию компонентного контроллера были бы весьма незначительными. (это похоже на передачу на стороне сервера (Server.Transfer) в .net.)