Есть ли способ отключить форму по умолчанию? - PullRequest
4 голосов
/ 01 ноября 2010

Для одного конкретного случая я хотел бы отобразить форму как часть (для редактирования на месте). Есть ли способ в formtastic отключить макет, созданный .inputs / .buttons? Вместо

<fieldset> <ol> <li> 

Я хотел бы просто обернуть поля в

<td>

Есть ли встроенный способ или какое-либо решение этой проблемы?

Ответы [ 4 ]

2 голосов
/ 02 ноября 2010

В Formtastic нет встроенного способа (пока что) изменить разметку.Либо используйте CSS для настройки достаточного количества разметок, либо поменяйте форму Formtastic для этой формы и создайте собственный код (как мы привыкли).

1 голос
/ 02 декабря 2014

В рельсах вы можете переписать функции, которые определяют теги, используемые для рендеринга элементов:

конфиг / Инициализаторы / formtastic_foundation.rb:

# change required fields advice tag (abbr -> span)
Formtastic::FormBuilder.required_string =
proc { Formtastic::Util.html_safe(%{<span title="#{Formtastic::I18n.t(:required)}">*</span>}) }

module Formtastic
  module Helpers
    # change field wrapper (ol -> div)
    module FieldsetWrapper
      protected
      def field_set_and_list_wrapping(*args, &block) #:nodoc:
        contents = args.last.is_a?(::Hash) ? '' : args.pop.flatten
        html_options = args.extract_options!

        if block_given?
          contents = if template.respond_to?(:is_haml?) && template.is_haml?
          template.capture_haml(&block)
          else
            template.capture(&block)
          end
        end

        contents = contents.join if contents.respond_to?(:join)

        legend = field_set_legend(html_options)
          fieldset = template.content_tag(:fieldset,
          Formtastic::Util.html_safe(legend) << template.content_tag(:div, Formtastic::Util.html_safe(contents)),
          html_options.except(:builder, :parent, :name)
        )

        fieldset
      end
    end
  end

  module Inputs
    module Base
      # change input wrapper tag (li.default_clases -> div.large-12.columns inside div.row)
      module Wrapping
        def input_wrapping(&block)
          def super_wrapper_html_options
            {:class => 'row'}
          end

          new_class = [wrapper_html_options[:class], "large-12 columns"].compact.join(" ")

          template.content_tag(:div,
            template.content_tag(:div,
              [template.capture(&block), error_html, hint_html].join("\n").html_safe,
              wrapper_html_options.merge(:class => new_class)),
            super_wrapper_html_options)
        end
      end
    end
  end
end

Я использую этот код для интеграции Formtastic 3 с Foundation 5.4.5

1 голос
/ 06 июня 2011

Пока не поддерживается, однако вы можете использовать разветвленную форму: https://github.com/linoj/formtastic

Подробнее на: http://www.vaporbase.com/postings/Replaceable_render_engines_for_Formtastic

Прочтите на официальном форуме, что когда-нибудь может произойти слияние с источником.

0 голосов
/ 30 ноября 2012

Я завернул свой вызов в форму-бит (в моем файле haml) в строку, а затем вставил

= "#{f.input ...}".gsub('<li class=', '<fart class=').html_safe #remove the li to align this input with the other text in the table. 

Это может быть немного проще, чем переписать форму без формастики, и она отлично работает.

Правда, это не идеальное решение. Хотя для одного ... хотя я могу жить с этим.

...