Как уже указывал @BKSpurgeon, реализация метода delegate
ничего не делает, но создает метод, который вызывает данный метод для объекта.
Таким образом, «динамического» делегирования не существует: просто реализуйте обычный метод с тем же именем и пусть он возвращает любое нужное вам значение.
def Mayfield
case some_attribute_value
when 'foo' then user.Mayfield
when 'bar' then something_else.Mayfield
end
end