Как реализовать тег кнопки для помощника form_for? - PullRequest
3 голосов
/ 02 июня 2011

Мне нужен реализатор, который создает тег <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.

Что мне нужно сделать для реализации этого помощника в моем приложении?

Ответы [ 2 ]

8 голосов
/ 25 ноября 2011

Вы можете создать пользовательский помощник по формам, который наследуется от FormBuilder для использования при создании форм.Я создал этот метод кнопки для использования с Bootstrap в Twitter.

Замените '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

Теперь у вас есть два способа использовать конструктор.

1.СУХОЙ для уток

Каждый раз, когда вы строите форму, в которой используется кнопка, вам нужно указать построителя ...

<%= form_for @duck, :builder => BootstrapFormBuilder do |form|%>

2.DRY для разработчиков

Добавьте следующее

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 %>
2 голосов
/ 02 июня 2011

Я реализовал подобный вспомогательный метод в одном из моих приложений ранее.Мне был нужен тег кнопки с изображением на кнопке и собственным классом.Вы можете передать либо строку, представляющую собой текст, который отображается на кнопке, либо сам объект.Это выглядит так:

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 %>

Это выглядит так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...