2010-09-18 2 views
16

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

<input type="submit" /> 

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

<button> 

с использованием метода button_to (рельсы 3.0.0)

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

+0

'button' не является специфическим к HTML5, а также 'input' для кнопок, устаревших в HTML5. –

+0

Собственно, '

+0

Извините за путаницу, тем более мое предпочтение использовать кнопки из-за гибкости контента и простоты стилизации. Мне нравится стилизовать все теги по умолчанию, поэтому помогает поддерживать кнопки вне входных данных. – Graham

ответ

4

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

+0

Почему этот ответ проголосовал? Это кажется мне разумным предложением? Есть ли проблема с переопределением button_to? –

+6

@SteveSmith Возможно отсутствие примера. – Noz

+0

Кроме того, переопределяющие помощники, более широко известные как перехват обезьян, не являются надежными для будущего. Так как это код просмотра, где от него ничего не зависит, может быть, вам все равно меньше? – Woahdae

0

Я обычно просто придерживаться этого в моем application_helper.rb файле:

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

Вы можете назвать это с тем, как так:

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

Я предполагаю, что это было downvoted, потому что теперь в Rails: http://api.rubyonrails.org/v3.2.13/classes/ActionView/Helpers/FormTagHelper.html#method-i-button_tag – nruth

1

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

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

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

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

+2

Это не то, что 'button_to' делает , –

+0

@ClemensHelm вы можете объяснить больше своего downvote? Я даже не говорю о том, что button_to должно делать в моем ответе. Можете ли вы сообщить мне, как ответ неправильный или как его можно улучшить? – FireDragon

+0

Я думаю, что @Clemens Helm пытается сказать, что 'button_to' генерирует форму. Оригинальный плакат хочет сгенерировать форму с кнопкой 'button' типа submit вместо тега' input'. – Mohamad

10

Начиная с последней версии Rails (4.0.2, не уверен в предыдущих версиях) передача блока в button_to вызывает логику ветвления в помощнике, которая создает элемент кнопки вместо ввода. не

Например, если вы хотите, чтобы сделать «Удалить» элемент кнопки в Haml, самозагрузки & fontawesome (мое использование случай):

= button_to(foo_path(@foo), 
    class: 'btn btn-sm', method: :delete, remote: true) do 
    <i class="fa fa-times"></i> 

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

3

Я только нашел, что изменение button_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> 
+0

Мне слишком лениво переопределить метод button_to, так что это сработало для меня :) – JustMichael

Смежные вопросы