Начиная с последней версии Rails (4.0.2, не уверен в предыдущих версиях) передача блока в button_to вызывает вспомогательную логику в помощнике, который создает элемент кнопки вместо ввода.
Например, если вы хотите сделать элемент кнопки «удалить» в haml, bootstrap & fontawesome (мой пример использования):
= button_to(foo_path(@foo),
class: 'btn btn-sm', method: :delete, remote: true) do
<i class="fa fa-times"></i>
Если вы хотите, чтобы они всегда были элементами кнопки, нетнесмотря ни на что, у вас всегда может быть содержимое кнопки внутри блока вместо первого аргумента.Не уверен, что компромисс есть.