【问题标题】:Rails: Embed child in submit_tagRails:在 submit_tag 中嵌入孩子
【发布时间】:2016-12-19 19:20:50
【问题描述】:
我有这个表格:
= form_tag(path, name: "name") do |f|
= hidden_field_tag "abc", content
= submit_tag "" do
%i.icon.ion-android-sync
如您所见,我正在尝试在表单提交标签中放置一个 Ionicon。
我尝试了很多方法,但都没有奏效。
在给定的示例中,我得到了一个大约宽度为 3 像素的空按钮。
是否可以在 submit_tag 中嵌入孩子?如果,你会怎么做?
非常感谢每个答案!
【问题讨论】:
标签:
css
ruby-on-rails
ruby
forms
ruby-on-rails-5
【解决方案1】:
简短的回答是“不”。但是,您可以创建一个“提交”类型的按钮,它会执行相同的操作并允许您将内容放入其中:
%button{type: "submit"}
%i.icon.ion-android-sync
【解决方案2】:
不,Rails submit 助手不会让你这样做。
我在我的应用程序中使用了自定义提交助手:
# Render a form submit button
# === Params
# +value+:: Value of the input/commit button, used for route constraints
# +text+:: Text for the button
# +:html_options+::
def submit(value=nil, text=nil, html_options={})
text ||= 'Submit'
html_options[:name] ||= 'commit'
html_options[:type] = 'submit'
html_options[:data] ||= {}
html_options[:data][:disable_with] ||= 'Please wait'
html_options[:autocomplete] = "off" # https://github.com/rails/jquery-ujs/issues/357
content_tag(:div, class: 'form-submit-wrapper') do
button_tag(html_options){ block_given? ? yield : text }
end
end
你可以在一个块中传递你想要的任何 HTML(对不起,这是 ERB,我对 HAML 不是很熟悉)
<%= submit do %>
<i class="icon ion-android-sync"></i>
<% end %>
前两个参数只有在您的表单有多个提交按钮时才有用
<%= submit('preview_action', 'Preview result') do %>
<i class="icon ion-android-sync"></i>
<% end %>
<%= submit('really_do_action', 'Do it for real') do %>
<i class="icon ion-android-sync"></i>
<% end %>