Подтвердить что ты не робот

Может ли button_to генерировать тег <button> вместо <input type="submit"/">?

Вместо

<input type="submit" />

Я хочу вывести

<button>

с помощью метода button_to (rails 3.0.0)

Возможно ли это?

4b9b3361

Ответ 1

Начиная с последней версии 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>

Если вы хотите, чтобы они всегда были элементами кнопки независимо от того, вы всегда можете иметь содержимое своей кнопки внутри блока вместо первого аргумента. Не уверен, что такое компромисс.

Ответ 2

Вы можете переопределить вспомогательный button_to в ApplicationHelper, чтобы отобразить тег button. Посмотрите на код, который button_to уже имеет и модифицирует его в соответствии с вашими потребностями.

Ответ 3

Я только что обнаружил, что смена кнопки_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>

Ответ 4

из того, что я вижу. Rails уже имеет помощник для вывода тегов; он называется button_tag (вместо button_to).

поэтому вы можете просто использовать следующие в своих представлениях, я не вижу необходимости переопределять button_to:

<%= button_tag "Button Text", :class => "btn", :type => "submit" %>

нет необходимости переопределять. также рекомендуется всегда указывать параметр типа:, поскольку в разных браузерах он отличается от других.

Ответ 5

Обычно я просто вставляю это в свой файл application_helper.rb:

  def button_tag(text, options={})
    content_tag(:button, {:type => "submit"}.merge(options)) { text }
  end

Затем вы можете вызвать его из вида следующим образом:

button_tag "Save", :class => 'accept'