Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Insert a non-input row into a Formtasic form

I am using Formtastic 2.1.1 in Rails 3.2 (with Active Admin) and I want to insert a row into my form that does not have an input field present. Is this possible and what is the syntax in the Formtastic DSL to achieve this?

Here's an example:

form do |f|

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

end

I'd like to do something like this:

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

Has anyone done this with Formtastic before?

like image 469
Randy Burgess Avatar asked May 09 '12 21:05

Randy Burgess


3 Answers

Figured this out myself. I just needed to insert the html without any method calls, like so:

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
like image 89
Randy Burgess Avatar answered Nov 16 '22 01:11

Randy Burgess


To insert any custom code in any place, you may use 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

Just be careful about the HTML structure. If you call this from f.inputs block, your code will be placed inside an <ol> element. On the "form" level, you are inside a <form> element.

A little warning: As with any "undocumented feature" this method may change without warning in any new release.

like image 16
Arsen7 Avatar answered Nov 16 '22 02:11

Arsen7


IDK if this is still something people search for but it was for me. Since form_buffers has been deprecated, I did the following and it worked out beautifully (with some CSS help).

form do |f|

  f.inputs "Model Info" do
    f.input :title
    f.input :published
    f.input :path
    li "Your important text here", class: "some_class"
  end
end

this outputs:

<li class="some_class">
  Your important text here
</li>

Got this idea from the docs after a too long Google search here FORMS and here ARBRE.

like image 4
Horatio Avatar answered Nov 16 '22 01:11

Horatio