Точно не скажу, зачем они нужны в контроллерах, но вот в вьюхах они нужны для того, чтобы заранее определить какую-то функцию, чтобы использовать ее во вьюхе.
Думаю, в контроллере также, но для меня удобнее просто определить новый метод и использовать его как хелпер.
У вас изначально неверное понимание модульности. Тут в этом и есть весь сахар, что гем должен работать ничего не зная о том, как и где он запущен.
В вашем случае, я думаю, надо сделать конфиг гема, где можно будет задать "название" приложения.
Есть Ассемблер.
Но если он есть, на нем все возможно, и в добавок он соображает быстрее того же C++, то почему еще существуют другие решения в мире софтовой разработки?
Традиции, привычки и необходимость поддерживать существующие проекты не в счет. Мне интересно, почему новые проекты пишутся не всегда на ассемблере?
Это не самый лучший вариант. Ведь символы (в отличие от строк) создаются один раз и хранятся все время в ОЗУ. Лучше с клиента передавайте массив и получайте к нему доступ через params[:symbol][1]