Вместо
<input type="submit" />
Я хочу вывести
<button>
с помощью метода button_to (rails 3.0.0)
Возможно ли это?
Вместо
<input type="submit" />
Я хочу вывести
<button>
с помощью метода button_to (rails 3.0.0)
Возможно ли это?
Начиная с последней версии 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>
Если вы хотите, чтобы они всегда были элементами кнопки независимо от того, вы всегда можете иметь содержимое своей кнопки внутри блока вместо первого аргумента. Не уверен, что такое компромисс.
Вы можете переопределить вспомогательный button_to
в ApplicationHelper
, чтобы отобразить тег button
. Посмотрите на код, который button_to
уже имеет и модифицирует его в соответствии с вашими потребностями.
Я только что обнаружил, что смена кнопки_to на использование блока генерирует тег кнопки вместо ввода:
так:
<%= button_to account_path(@account), data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-default btn-danger' do %>
Inactivate
<% end %>
Формирует:
<form method="post" class="button_to" action="/accounts/30">
<div>
<input type="hidden" value="delete" name="_method">
<button type="submit" data-confirm="Are you sure?" class="btn btn-default btn-danger">
Inactivate
</button>
<input type="hidden" value="" name="authenticity_token">
</div>
</form>
из того, что я вижу. Rails уже имеет помощник для вывода тегов; он называется button_tag
(вместо button_to
).
поэтому вы можете просто использовать следующие в своих представлениях, я не вижу необходимости переопределять button_to:
<%= button_tag "Button Text", :class => "btn", :type => "submit" %>
нет необходимости переопределять. также рекомендуется всегда указывать параметр типа:, поскольку в разных браузерах он отличается от других.
Обычно я просто вставляю это в свой файл application_helper.rb:
def button_tag(text, options={})
content_tag(:button, {:type => "submit"}.merge(options)) { text }
end
Затем вы можете вызвать его из вида следующим образом:
button_tag "Save", :class => 'accept'