我需要实现一个创建<button>...</button>
标记的帮助器,我需要做一些类似的事情:
<%= form_for(some_var) do |f| %>
<%= f.submit '+' %>
<% end %>
助手应该像这样工作:
<%= f.button '+' %>
# Returns
<button type="submit">+</button>
我看到了https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/form_tag_helper.rb#L458,但这在Rails 3.0.7中没有实现。
在我的应用程序中实现此帮助程序需要做些什么?
答案 0 :(得分:8)
您可以创建一个自定义表单助手,该表单助手从FormBuilder继承以在创建表单时使用。我创建了这个按钮方法,用于Twitter的Bootstrap。
用任何适合的方式替换'Bootstrap'。 (也许是CuteAsAButtonBuilder?)
app/helpers/bootstrap_form_builder.rb
class BootstrapFormBuilder < ActionView::Helpers::FormBuilder
def button(label, options={})
# You can also set default options, like a class
default_class = options[:class] || 'btn'
@template.button_tag(label.to_s.humanize, :class => default_class)
end
end
现在您有两种方法可以使用构建器。
每次构建使用该按钮的表单时,都需要指定构建器...
<%= form_for @duck, :builder => BootstrapFormBuilder do |form|%>
添加以下
app/helpers/application_helper.rb
module ApplicationHelper
def bootstrap_form_for(name, *args, &block)
options = args.extract_options!
form_for(name, *(args << options.merge(:builder => BootstrapFormBuilder)), &block)
end
end
请打电话给魔术师......
<%= bootstrap_form_for @person do |form| %>
<%= form.button 'Click Me' %>
<% end %>
答案 1 :(得分:2)
我之前在我的一个应用程序中实现了类似的辅助方法。我需要按钮标签,按钮上有一个图像和一个自己的类。您可以传递一个字符串,该字符串是按钮上显示的文本或对象本身。它看起来像这样:
def submit_button(object)
image = "#{image_tag('/images/icons/tick.png', :alt => '')}"
if object.is_a?(String)
value = "#{image}#{object}"
else
name = object.class.to_s.titlecase
value = object.new_record? ? "#{image} Save #{name} Information" : "#{image} Update #{name} Information"
end
content_tag :button, :type => :submit, :class => 'button positive' do
content_tag(:image, '/images/icons/tick.png', :alt => '')
value
end
end
然后您以<%= submit_button @admission %>
看起来像这样: