Insert a non-input row into a Formtasic form

2019-01-22 03:43发布

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?

3条回答
Viruses.
2楼-- · 2019-01-22 04:22

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.

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-01-22 04:26

Here's a slightly simplified form of @arsen7's answer:

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

which in my form looks like this:

Simple HTML insert

And here's one that mimics ActiveAdmin's default style:

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

which looks like this:

ActiveAdmin-style HTML insert

查看更多
We Are One
4楼-- · 2019-01-22 04:28

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
查看更多
登录 后发表回答