可以button_to生成<button>标签而不是<input type =“submit”/>?</button>

时间:2010-09-18 10:41:33

标签: ruby-on-rails html5 button

而不是

<input type="submit" />

我想输出

<button>

使用button_to方法(rails 3.0.0)

这可能吗?

5 个答案:

答案 0 :(得分:10)

从最新版本的Rails(4.0.2,不确定以前的版本)开始,将块传递给button_to会调用帮助程序中的分支逻辑,创建一个按钮元素而不是输入。

例如,如果你想在haml,bootstrap&amp;中创建一个'delete'按钮元素。 fontawesome(我的用例):

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

如果你想让它们永远都是按钮元素,那么你总是可以将你的按钮内容放在一个块中而不是第一个参数中。不确定那里有什么权衡。

答案 1 :(得分:4)

您可以覆盖button_to中的ApplicationHelper帮助程序来代替呈现button标记。查看button_to已有的代码并根据您的目的对其进行修改。

答案 2 :(得分:4)

我刚刚发现将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>

答案 3 :(得分:3)

从我可以看到Rails已经有一个帮助输出标签;它被称为button_tag(而不是button_to)。

所以,您可以在视图中使用以下内容,我认为无需覆盖button_to:

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

无需覆盖。另外,建议始终提供:type参数,因为它在不同的浏览器中呈现不同。

答案 4 :(得分:0)

我通常只是将其粘贴在我的application_helper.rb文件中:

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

然后您可以从类似的视图中调用它:

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