Комментарии 2
Вообще прок/лямбда как раз для замыканий и нужна, умеет смотреть вверх. А метод привязан к объекту и смотрит в него, на то он и метод. Но можно его открепить через unbind и будет UnboundMethod. Либо не от инстанса, а от класса откреплять - сразу unbound будет. Ну и потом сделать bind. А тут, как понимаю, в случае символа вызывается метод у объекта с этим именем. А так как в объекте ничего про юзера нет - оно туда в итоге и не попадает, да и не может, если как-то на лету не модифицируется объект. И может и к лучшему, чтобы лишнего не перезаписало, да и тащить вообще весь контекст заменяя оригинальный у объекта - дичь. А вот замыкание ниже приоритетом и наоборот будет временно переопределено тем что в объекте, если там есть что-то с тем же именем.
В случае символа создаётся Method, привязанный к объекту из Grape::Middleware::Error. При его вызове self остаётся равным этому receiver’у, поэтому доступ к request (который есть у Grape::Endpoint) не появляется. Про UnboundMethod — да, технически можно было бы поиграться с unbind/bind, но в данном случае Grape этого не делает. И я с вами согласен, что это к лучшему.

Как «красивый» Ruby‑синтаксис украл request из Grape и поломал нам Rate Limiting