Вставьте строку без ввода в форму Formtasic

Я использую Formtastic 2.1.1 в Rails 3.2 (с Active Admin), и я хочу вставить строку в свою форму, в которой не есть поле ввода. Возможно ли это, и что является синтаксисом в Formtastic DSL для достижения этого?

Вот пример:

form do |f|

    f.inputs "Model Info" do
      f.input :title
      f.input :published
      f.input :path
    end

end

Я хотел бы сделать что-то вроде этого:

form do |f|

    f.inputs "Model Info" do
      f.input :title
      f.input :published
      f.input :path
      f.div "This is some important text that people using this form need to know"
    end

end

Кто-нибудь сделал это с Formtastic раньше?

Ответы

Ответ 1

Чтобы вставить любой пользовательский код в любом месте, вы можете использовать f.form_buffers.last:

form do |f|
  f.form_buffers.last << "<p>Hello world!</p>".html_safe # The simple way

  ft = f.template # just a helper variable

  f.inputs "Foo" do
    f.input :title

    f.form_buffers.last << ft.content_tag(:li) do
      ft.content_tag(:p, "Hello again!") +
          ft.tag(:input, type: :hidden, name: "bar[]", value: "baz")
    end
    f.input :path
  end
end

Просто будьте осторожны с HTML-структурой. Если вы вызываете это из блока f.inputs, ваш код будет помещен внутри элемента <ol>. На уровне "form" вы находитесь внутри элемента <form>.

Маленькое предупреждение: Как и любая "недокументированная функция", этот метод может быть изменен без предупреждения в любой новой версии.

Ответ 2

Подумал об этом сам. Мне просто нужно было вставить html без каких-либо вызовов методов, например:

form do |f|

  f.inputs "Model Info" do
    f.input :title
    f.input :published
    f.input :path
  end

  f.inputs "Custom HTML Stuff" do
    "<div id=\"element-name\">
      Some kind of content
    </div>".html_safe
  end

end

Ответ 3

Здесь немного упрощенная форма ответа @arsen7:

f.form_buffers.last << 
  "<p>Activate interlock, dynatherms connected</p>".html_safe

который в моей форме выглядит следующим образом:

Simple HTML insert

И вот тот, который имитирует стиль по умолчанию ActiveAdmin:

f.form_buffers.last << (<<END
<li class="string input optional stringish">
  <label class="label">Activate interlock</label>
  <div style="display: inline-block;">Dynatherms connected</div>
</li>
END
).html_safe

который выглядит следующим образом:

ActiveAdmin-style HTML insert