Rails 5.1中f.submit结合content_tag失效,求Bootstrap样式按钮实现方案
解决Rails 5.1中f.submit添加Bootstrap样式和Font Awesome图标问题
嘿,我之前也碰到过一模一样的问题,Rails 5.1里的f.submit在处理带图标的按钮时确实有点坑——它不支持块语法,直接传HTML内容还会被转义。给你两个靠谱的解决方案:
方案一:用button_tag替代f.submit(推荐)
button_tag天生支持块语法,能自由组合图标和文字,Bootstrap样式也能完美生效,同时完全不影响表单提交功能:
<%= button_tag type: 'submit', class: 'primary-btn add-to-cart' do %> <i class="fa fa-shopping-cart"></i> Add to Cart <% end %>
这里把type设为submit,按钮就会自动关联表单的提交动作,块里的HTML会正常渲染,图标和样式都能按预期显示。
方案二:保留f.submit,用raw避免HTML转义
如果你一定要用f.submit,可以把图标和文字拼接后用raw方法渲染,防止Rails把HTML转义成普通字符串:
<%= f.submit raw(content_tag(:i, nil, class: ["fa", "fa-shopping-cart"]) + " Add to Cart"), class: "primary-btn add-to-cart" %>
注意这里content_tag的第二个参数传nil(因为图标不需要内部文字),然后和按钮文字拼接,再用raw确保HTML代码不被转义。
为什么你的原有代码无效?
- 第一种写法:
f.submit会把content_tag的结果当成普通字符串处理,导致HTML被转义,最终页面上显示的是<i class="fa fa-shopping-cart">Add to Cart</i>这样的代码,而不是图标。 - 第二种尝试用块的方式:Rails 5.1的
f.submit不支持块语法,块里的内容根本不会被渲染,只会显示你传的按钮文字。
内容的提问来源于stack exchange,提问作者Lucy
相关产品推荐
相关产品推荐

